Ios 向UIView添加填充
我正在寻找一种向UIView添加Ios 向UIView添加填充,ios,iphone,cocoa-touch,uiview,uikit,Ios,Iphone,Cocoa Touch,Uiview,Uikit,我正在寻找一种向UIView添加填充属性的方法。理想情况下,我希望避免子类化并将其放入一个类别中。用法类似于: myview.padding = UIEdgeInsetsMake(10, 10, 10, 10); 并且可能还有一个paddingBox属性,该属性将返回一个CGRect来描述内部填充框的大小和位置 现在,在这样一个类别中如何实现呢。起初我想使用边界,但不幸的是边界的大小与帧的大小相关联(始终相同),只有坐标可以不同。这通常是通过在视图中设置边界来实现的。因此,如果你想要一个10个
填充属性的方法。理想情况下,我希望避免子类化并将其放入一个类别中。用法类似于:
myview.padding = UIEdgeInsetsMake(10, 10, 10, 10);
并且可能还有一个paddingBox
属性,该属性将返回一个CGRect
来描述内部填充框的大小和位置
现在,在这样一个类别中如何实现呢。起初我想使用边界
,但不幸的是边界的大小与帧的大小相关联(始终相同),只有坐标可以不同。这通常是通过在视图中设置边界来实现的。因此,如果你想要一个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);
Swift 3的更新
view.bounds = view.frame.insetBy(dx: 10.0, dy: 10.0)
:)更新:从iOS11开始,您应该使用方向布局边距
而不是布局边距
资料来源:
自iOS 8以来,每个视图现在都有一个与填充相对应的layoutMargins
属性
myview.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);
使用自动布局时,带有|-[subview]-|
,|-
的格式将引用使用布局边距定义的边
来源:您可以覆盖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)
不幸的是,这也会改变视图的大小。正如我在问题中提到的,文档声明边界矩形的大小与框架矩形的大小相耦合,因此对其中一个的更改会影响另一个。
。换句话说,你发布的代码应该是-10而不是10,即使如此,它只会添加顶部和左侧的填充,但我会再次测试,以确保我没有遗漏什么。你有文档链接吗,因为我非常确定边界和框架的大小可以不同?这些都是很好的信息。嗯,刚刚在文档中找到了,我只是在做一个实验来确认。我现在要道歉,因为事实就是这样。看起来您可能需要使用一个简单的子类。self.contentTextView.bounds=self.contentTextView.frame.insetBy(dx:10,dy:10)
(Swift 5+)如果你在考虑Android意义上的padding
——一个绘制视图背景而不是内容的空间——我认为iOS的视图中没有内置这种概念。奇怪吧?