我正在寻找一种方法来添加一个padding
属性到UIView。理想情况下,我想避免子类化并将其放入类别中。用法如下:
myview.padding = UIEdgeInsetsMake(10, 10, 10, 10);
也许还有一个paddingBox
属性,它会返回一个描述内部填充盒大小和位置的CGRect
。
现在,如何在类别中实现类似的东西。我最初使用bounds
,但不幸的是bounds
的大小与frame
的大小(总是相同)有关,只有坐标可以不同。
这通常通过在视图中设置边界来完成。所以,如果你想要一个10的插图你可以做:
view.bounds = CGRectInset(view.frame, 10.0f, 10.0f);
边界定义了视图相对于框架的可绘制区域。所以这应该实际上是一个填充。然后,您可以从边界获取'paddingBox'。
希望这可以帮助! :)
Swift 3的更新
view.bounds = view.frame.insetBy(dx: 10.0, dy: 10.0)
:)
从iOS 8开始,每个视图现在都有一个与填充相对应的layoutMargins
属性。
myview.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);
使用AutoLayout时,|-[subview]-|
,|
的格式将引用layoutMargins
定义的边。
资料来源:https://developer.apple.com/reference/uikit/uiview/1622566-layoutmargins?language=objc
你真正需要做的是创建一个视图并为其添加一个子视图。让一个视图成为背景并为其提供所需的帧。然后使用边缘插入使第二个子视图成为所需的帧。
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);
您可以覆盖alignmentRectInsets属性。这是Swift 4中的一个例子
class YourCustomView: UIView {
override var alignmentRectInsets: UIEdgeInsets {
return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
}
}
Swift 4的更新:
self.yourView.layoutMargins = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
您可以像这样插入视图的框架/边界:
yourView.frame = yourView.frame.inset(by: UIEdgeInsets(top: .zero, left: 5.0, bottom: 5.0, right: .zero)