添加填充到UIView

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'.

希望这可以帮助!:)

  • 不幸的是,这也改变了视图的大小.正如我在我的问题中所提到的,文档声明"边界矩形的大小与框架矩形的大小相关联,因此更改为一个会影响另一个." 换句话说,你发布的代码应该有-10而不是10,即便如此,它只会添加顶部和左边填充,但我会再次测试,只是为了确保我没有遗漏一些东西. (3认同)
  • ```self.contentTextView.bounds = self.contentTextView.frame.insetBy(dx: 10, dy: 10)``` (***Swift 5+*** ) (3认同)

小智 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


Gan*_*458 9

你真正需要做的是创建一个视图并为其添加一个子视图.让一个视图成为背景并为其提供所需的帧.然后使用边缘插入使第二个子视图成为所需的帧.

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)


Oma*_*eik 8

您可以覆盖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)


Boo*_*nge 7

Swift 4 更新:

self.yourView.layoutMargins = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
Run Code Online (Sandbox Code Playgroud)