无法更改默认的layoutMargins视图

时间:2014-09-11 10:47:42

标签: ios objective-c swift

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

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

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

}

..它似乎没有任何影响和

3 个答案:

答案 0 :(得分:4)

我使用KVO来检测view.layoutMargins的变化。我发现在layoutSubViews处理期间自定义后,视图本身会更改layoutMargins。

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

- (void)viewDidLayoutSubviews
{
    self.view.layoutMargins = UIEdgeInsetsMake(100.0f, 100.0f, 100.0f, 100.0f);
}
PS:通过这些代码是OC,但我认为它也适用于Swift。希望这对你有用!

答案 1 :(得分:4)

您正在尝试设置视图控制器的根视图的布局边距。对于布局边距,根视图的行为与层次结构中的任何其他视图的行为不同。

根视图的布局边距由视图控制器专门管理,您无法设置它们。

来自Apple文档:

  

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

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

答案 2 :(得分:0)

我不确定问题是什么。

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,则需要在视图中设置preservesSuperviewLayoutMargins。

Reference Documentation