不能更改默认的layoutMargins的视图

由于ios 8.0视图具有额外的layoutMargins ,默认情况下每边有8个点值。

当我尝试更改viewDidLoad边距时,它似乎对子视图没有影响:

 override func viewDidLoad(){ super.viewDidLoad() self.view.layoutMargins = UIEdgeInsets(top:100, left:100, bottom:100, right:100) } 

..itd似乎没有任何效果和

我用KVO来检测view.layoutMargins的变化。 而且我发现在layoutSubViews处理过程中,视图本身会自定义更改layoutMargins。

所以,只需将您的自定义代码放在viewDidLayoutSubviews方法中:

 - (void)viewDidLayoutSubviews { self.view.layoutMargins = UIEdgeInsetsMake(100.0f, 100.0f, 100.0f, 100.0f); } 

PS:通过这些代码是OC,但我认为它也可以用于Swift。 希望这对你有用!

您正试图设置视图控制器的根视图的布局边距。 根视图的行为与布局边界中的任何其他视图的行为不同。

根视图的布局边界由视图控制器独占pipe理,您无法设置它们。

从Apple文档:

如果视图是视图控制器的根视图,则系统设置和pipe理边距。 顶部和底部边距设置为零点。 侧边距取决于当前的尺寸等级,但可以是16或20点。 您无法更改这些边距。

https://developer.apple.com/reference/uikit/uiview/1622566-layoutmargins

我不确定是什么问题。

 override func viewDidLoad() { super.viewDidLoad() self.view.layoutMargins = UIEdgeInsets(top:100, left:100, bottom:100, right:100) println(self.view.layoutMargins.top) println(self.view.layoutMargins.left) println(self.view.layoutMargins.right) println(self.view.layoutMargins.bottom) } 

这为每个边距打印100。 如果您试图为该视图的子视图设置边距,则还需要明确设置它们。 调用self.view.layoutMargins只会影响self.view的layoutMargins。

如果您希望视图的子视图尊重视图的超级视图的layoutMargins,则需要在视图上设置保留视图放大视图。

参考文档