添加填充到UIView
问题描述:
我正在寻找一种方法将padding
属性添加到UIView。理想情况下,我想避免将子类化并将其放入一个类别中。用法是这样的:添加填充到UIView
myview.padding = UIEdgeInsetsMake(10, 10, 10, 10);
也许有paddingBox
性质以及其将返回一个CGRect
描述的尺寸和内部填充盒的位置。
现在,如何实现类似的东西。我最初虽然使用bounds
,但不幸的是,bounds
的大小与frame
的大小(总是相同)只有坐标可以不同。
答
这通常通过在视图中设置边界来完成。所以如果你想要一个10的插图,你可以这样做:
view.bounds = CGRectInset(view.frame, 10.0f, 10.0f);
边界定义了相对于帧的视图的可绘制区域。所以这应该实际上是填充。然后你可以从界限中获得'paddingBox'。
希望这会有所帮助! :)
答
你真的必须做的是创建一个视图,并添加一个子视图。使一个视图的背景,并给它你想要的框架。然后使第二个子视图与边缘插图一样。
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);
答
更新夫特3
view.bounds = view.frame.insetBy(dx: 10.0, dy: 10.0)
:)
答
由于iOS 8的,每个视图具有现在对应于填充一个layoutMargins
属性。
myview.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);
当您使用自动版式,与|-[subview]-|
格式,|
将引用与layoutMargins
定义的边缘。
来源:https://developer.apple.com/reference/uikit/uiview/1622566-layoutmargins?language=objc
答
您可以覆盖alignmentRectInsets财产。以下是Swift 4中的一个例子:
class YourCustomView: UIView {
override var alignmentRectInsets: UIEdgeInsets {
return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
}
}
不幸的是,这也改变了视图的大小。正如我在我的问题中提到的那样,文档声明:“边框矩形的大小与框架矩形的大小相关联,以便对其中一个的改变影响另一个。换句话说,你发布的代码应该有-10而不是10,即使如此,它只会添加顶部和左侧填充,但我会再次测试,以确保我不会错过任何东西。 – Meda 2013-02-13 15:51:13
你有链接到文档,因为我敢肯定,边界和框架的大小可以不同? – 2013-02-13 18:03:15
http://*.com/questions/749558/why-is-there-an-frame-rectangle-and-an-bounds-rectangle-in-an-uiview和http://*.com/questions/1071112/uiviews-frame-bounds-center-origin-when-to-use-什么是这方面的很好的信息。 – 2013-02-13 18:03:45