添加填充到UIView

问题描述 投票:56回答:7

我正在寻找一种方法来添加一个padding属性到UIView。理想情况下,我想避免子类化并将其放入类别中。用法如下:

myview.padding = UIEdgeInsetsMake(10, 10, 10, 10);

也许还有一个paddingBox属性,它会返回一个描述内部填充盒大小和位置的CGRect

现在,如何在类别中实现类似的东西。我最初使用bounds,但不幸的是bounds的大小与frame的大小(总是相同)有关,只有坐标可以不同。

ios iphone cocoa-touch uiview uikit
7个回答
43
投票

这通常通过在视图中设置边界来完成。所以,如果你想要一个10的插图你可以做:

view.bounds = CGRectInset(view.frame, 10.0f, 10.0f);

边界定义了视图相对于框架的可绘制区域。所以这应该实际上是一个填充。然后,您可以从边界获取'paddingBox'。

希望这可以帮助! :)


27
投票

Swift 3的更新

view.bounds = view.frame.insetBy(dx: 10.0, dy: 10.0)

:)


17
投票

从iOS 8开始,每个视图现在都有一个与填充相对应的layoutMargins属性。

myview.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);

使用AutoLayout时,|-[subview]-||的格式将引用layoutMargins定义的边。

资料来源:https://developer.apple.com/reference/uikit/uiview/1622566-layoutmargins?language=objc


8
投票

你真正需要做的是创建一个视图并为其添加一个子视图。让一个视图成为背景并为其提供所需的帧。然后使用边缘插入使第二个子视图成为所需的帧。

UIView backgroundView = new UIView(CGRect.FromLTRB(0, 0, 100, 100))
{
    BackgroundColor = backgroundGray,
};

//Will have a right edge inset of 10
UIView edgyView = new UIView(CGRect.FromLTRB(0, 0, 90, 100))
{
    BackgroundColor = backgroundGray,
}

backgroundView.AddSubview(edgyView);

7
投票

您可以覆盖alignmentRectInsets属性。这是Swift 4中的一个例子

class YourCustomView: UIView {

    override var alignmentRectInsets: UIEdgeInsets {
        return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
    }
}

1
投票

Swift 4的更新:

self.yourView.layoutMargins = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)

0
投票

您可以像这样插入视图的框架/边界:

    yourView.frame = yourView.frame.inset(by: UIEdgeInsets(top: .zero, left: 5.0, bottom: 5.0, right: .zero)
© www.soinside.com 2019 - 2024. All rights reserved.