我正在寻找一种向UIView添加padding
属性的方法。理想情况下,我想避免子类化并将其放入类别中。用法如下:
myview.padding = UIEdgeInsetsMake(10, 10, 10, 10);
也许有一个paddingBox
属性会返回一个CGRect
来描述内部填充框的大小和位置。
现在,如何在类别中实现类似的东西。我最初使用的是bounds
,但遗憾的是bounds
的大小与frame
的大小相关(始终相同),只有坐标可以不同。
答案 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)