Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 向UIView添加填充_Ios_Iphone_Cocoa Touch_Uiview_Uikit - Fatal编程技术网

Ios 向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个

我正在寻找一种向UIView添加
填充属性的方法。理想情况下,我希望避免子类化并将其放入一个类别中。用法类似于:

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的视图中没有内置这种概念。奇怪吧?