使用UIView和UITableView的UIViewController
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
<__NSArrayM 0x786ab6e0>(
<NSLayoutConstraint:0x7896e940 UIView:0x7896e470.trailingMargin == UITableView:0x79b51a00.trailing - 16>,
<NSLayoutConstraint:0x7896e970 UITableView:0x79b51a00.leading == UIView:0x7896e470.leadingMargin - 16>,
<NSLayoutConstraint:0x7896e9a0 V:[_UILayoutGuide:0x7896e510]-(0)-[UITableView:0x79b51a00]>,
<NSLayoutConstraint:0x7896e9d0 V:[UITableView:0x79b51a00]-(0)-[_UILayoutGuide:0x7896e600]>,
<_UILayoutSupportConstraint:0x7896c7d0 V:[_UILayoutGuide:0x7896e510(0)]>,
<_UILayoutSupportConstraint:0x7896c2b0 V:|-(0)-[_UILayoutGuide:0x7896e510] (Names: '|':UIView:0x7896e470 )>,
<_UILayoutSupportConstraint:0x7896cbf0 V:[_UILayoutGuide:0x7896e600(0)]>,
<_UILayoutSupportConstraint:0x7896ea00 _UILayoutGuide:0x7896e600.bottom == UIView:0x7896e470.bottom>
)结果是看不到任何边距,什么都没有改变...我在说什么?
iOS 8
发布于 2015-08-01 09:25:28
自定义layoutMargins在作为UIViewController实例根的视图上不起作用。这些是由系统定义的,不能被覆盖。您需要添加另一个包含所有内容的子视图,然后可以修改这个新"contentView“上的布局页边距。
更新:
讨论
使用此属性可以指定视图边缘和任何子视图之间所需的空间量(以点为单位)。自动布局使用边距作为放置内容的提示。例如,如果使用格式字符串“|- subview -|”指定一组水平约束,子视图的左边缘和右边缘将通过相应的布局边距从superview的边缘插入。当视图的边缘接近superview的边缘并且preservesSuperviewLayoutMargins属性为YES时,实际的布局边距可能会增加,以防止内容与superview的边距重叠。
默认边距为每边八个点。
如果视图是视图控制器的根视图,则系统设置并管理边距。上边距和下边距设置为零点。侧边距随当前大小类别的不同而变化,但可以是16或20点。您无法更改这些页边距。
发布于 2017-08-24 22:33:50
这已针对iOS 11进行了更改。在此iOS版本中设置部署目标时,自定义页边距似乎工作得很好。总有一天,我们会嘲笑我们以前的经历。
如果你想设置比系统最小值更低的值(根据设备的不同可能会有所不同)-你还必须将viewRespectsSystemMinimumLayoutMargins设置为false (默认情况下为true )。
如果你的目标是iOS 10和更低的版本,那你就不走运了,@Reverend的答案是正确的--viewcontroller的根视图没有布局边距定制。
https://stackoverflow.com/questions/27421469
复制相似问题