添加填充到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'。

希望这会有所帮助! :)

+3

不幸的是,这也改变了视图的大小。正如我在我的问题中提到的那样,文档声明:“边框矩形的大小与框架矩形的大小相关联,以便对其中一个的改变影响另一个。换句话说,你发布的代码应该有-10而不是10,即使如此,它只会添加顶部和左侧填充,但我会再次测试,以确保我不会错过任何东西。 – Meda 2013-02-13 15:51:13

+0

你有链接到文档,因为我敢肯定,边界和框架的大小可以不同? – 2013-02-13 18:03:15

+0

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

你真的必须做的是创建一个视图,并添加一个子视图。使一个视图的背景,并给它你想要的框架。然后使第二个子视图与边缘插图一样。

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) 
    } 
}