首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置UIView的layoutMargins不起作用

设置UIView的layoutMargins不起作用
EN

Stack Overflow用户
提问于 2014-12-11 19:11:47
回答 2查看 23.3K关注 0票数 23

使用UIViewUITableViewUIViewController

代码语言:javascript
复制
UIView
|-UITableView

我尝试这样设置边距:

代码语言:javascript
复制
- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.layoutMargins = UIEdgeInsetsMake(30, 30, 30, 30);
    self.tableView.preservesSuperviewLayoutMargins = YES;
    [self.view layoutIfNeeded];
}

但在视图上没有发生任何事情。

下面是来自InterfaceBuilder的约束

代码语言:javascript
复制
(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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-01 09:25:28

自定义layoutMargins在作为UIViewController实例根的视图上不起作用。这些是由系统定义的,不能被覆盖。您需要添加另一个包含所有内容的子视图,然后可以修改这个新"contentView“上的布局页边距。

更新:

讨论

使用此属性可以指定视图边缘和任何子视图之间所需的空间量(以点为单位)。自动布局使用边距作为放置内容的提示。例如,如果使用格式字符串“|- subview -|”指定一组水平约束,子视图的左边缘和右边缘将通过相应的布局边距从superview的边缘插入。当视图的边缘接近superview的边缘并且preservesSuperviewLayoutMargins属性为YES时,实际的布局边距可能会增加,以防止内容与superview的边距重叠。

默认边距为每边八个点。

如果视图是视图控制器的根视图,则系统设置并管理边距。上边距和下边距设置为零点。侧边距随当前大小类别的不同而变化,但可以是16或20点。您无法更改这些页边距。

票数 47
EN

Stack Overflow用户

发布于 2017-08-24 22:33:50

这已针对iOS 11进行了更改。在此iOS版本中设置部署目标时,自定义页边距似乎工作得很好。总有一天,我们会嘲笑我们以前的经历。

如果你想设置比系统最小值更低的值(根据设备的不同可能会有所不同)-你还必须将viewRespectsSystemMinimumLayoutMargins设置为false (默认情况下为true )。

如果你的目标是iOS 10和更低的版本,那你就不走运了,@Reverend的答案是正确的--viewcontroller的根视图没有布局边距定制。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27421469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档