由于ios 8.0视图有额外的layoutMargins
,默认情况下每个边都有8个点值。
当我尝试更改viewDidLoad
中的边距时,它似乎对子视图没有影响:
override func viewDidLoad(){
super.viewDidLoad()
self.view.layoutMargins = UIEdgeInsets(top:100, left:100, bottom:100, right:100)
}
..它似乎没有任何影响和
答案 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。