添加填充到UIView

时间:2013-02-13 15:21:08

标签: ios iphone cocoa-touch uiview uikit

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

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

也许有一个paddingBox属性会返回一个CGRect来描述内部填充框的大小和位置。

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

6 个答案:

答案 0 :(得分:43)

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

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

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

希望这有帮助! :)

答案 1 :(得分:24)

Swift 3的更新

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

:)

答案 2 :(得分:13)

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

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

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

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

答案 3 :(得分:7)

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

class YourCustomView: UIView {

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

答案 4 :(得分:0)

Swift 4的更新:

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

答案 5 :(得分:0)

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

    yourView.frame = yourView.frame.inset(by: UIEdgeInsets(top: .zero, left: 5.0, bottom: 5.0, right: .zero)