Med*_*eda 59 iphone cocoa-touch uikit uiview ios
我正在寻找一种方法来padding
向UIView 添加属性.理想情况下,我想避免子类化并将其放入类别中.用法如下:
myview.padding = UIEdgeInsetsMake(10, 10, 10, 10);
Run Code Online (Sandbox Code Playgroud)
也许还有一个paddingBox
属性,它将返回CGRect
描述内部填充盒的大小和位置.
现在,如何在类别中实现类似的东西.我最初虽然使用bounds
,但不幸的bounds
是,它的大小与frame
(总是相同)的大小相关联,只有坐标可以不同.
Geo*_*een 45
这通常通过在视图中设置边界来完成.所以如果你想要一个10的插图你可以做:
view.bounds = CGRectInset(view.frame, 10.0f, 10.0f);
Run Code Online (Sandbox Code Playgroud)
边界定义了视图相对于框架的可绘制区域.所以这应该实际上是一个填充.然后,您可以从边界获取'paddingBox'.
希望这可以帮助!:)
小智 27
Swift 3的更新
view.bounds = view.frame.insetBy(dx: 10.0, dy: 10.0)
Run Code Online (Sandbox Code Playgroud)
:)
yag*_*eek 18
从iOS 8开始,每个视图现在都有一个layoutMargins
与填充相对应的属性.
myview.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);
Run Code Online (Sandbox Code Playgroud)
当您使用自动版式,用格式|-[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);
Run Code Online (Sandbox Code Playgroud)
您可以覆盖alignmentRectInsets属性.这是Swift 4中的一个例子
class YourCustomView: UIView {
override var alignmentRectInsets: UIEdgeInsets {
return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 4 更新:
self.yourView.layoutMargins = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
76123 次 |
最近记录: |