不能更改默认的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,则需要在视图上设置保留视图放大视图。
参考文档