设置UIView的layoutMargins不起作用
UIViewController
与UIView
和UITableView
UIView |-UITableView
我正在尝试设置这样的边距:
- (void)viewDidLoad { [super viewDidLoad]; self.view.layoutMargins = UIEdgeInsetsMake(30, 30, 30, 30); self.tableView.preservesSuperviewLayoutMargins = YES; [self.view layoutIfNeeded]; }
但是观点上什么也没发生。
以下是InterfaceBuilder的约束
(lldb) po self.view.constraints ( , , , , , , , )
结果没有看到任何边缘,没有任何改变….我正在发布什么?
iOS 8
自定义layoutMargins不适用于作为UIViewController实例的根的视图。 这些是由系统定义的,不能被覆盖。 您需要添加另一个包含所有内容的子视图,然后可以修改此新“contentView”上的布局边距
更新:
讨论
使用此属性可指定视图边缘与任何子视图之间所需的空间量(以磅为单位)。 自动布局使用边距作为放置内容的提示。 例如,如果使用格式字符串“| – [subview] – |”指定一组水平约束,则子视图的左右边缘将通过相应的布局边距从超级视图的边缘插入。 当视图的边缘靠近超视图的边缘并且preservesSuperviewLayoutMargins属性为YES时,可以增加实际的布局边距以防止内容与superview的边距重叠。
默认边距为每边八个点。
如果视图是视图控制器的根视图,则系统会设置和管理边距。 顶部和底部边距设置为零点。 侧边距取决于当前尺寸等级,但可以是16或20点。 您无法更改这些边距。
这已针对iOS 11
进行了更改。 在为此iOS版本进行部署目标设置时,自定义边距似乎运行良好。 有一天,我们会嘲笑我们之前的经历。
如果要设置低于系统最小值的值(可能因设备而异) – 您还必须将viewRespectsSystemMinimumLayoutMargins
设置为false(默认情况下为true)。
如果您的目标是iOS 10
及更低版本,那么您的运气不佳,@ Reverend答案是正确的 – 没有针对viewcontroller根视图的布局边距自定义。