自动布局约束+旋转=约束未更新

时间:2015-12-19 13:36:16

标签: ios swift autolayout nslayoutconstraint

这是我的架构:

enter image description here

我不想为PageViewController设置特定的帧大小,所以我在viewDidLoad方法中设置了这几个约束:

pageView!.view.translatesAutoresizingMaskIntoConstraints = false

let views = ["pageView": pageView!.view]

let constH = NSLayoutConstraint.constraintsWithVisualFormat("H:|[pageView]|", options: .AlignAllCenterY, metrics: nil, views: views)
view.addConstraints(constH)

let heightConstant = self.navigationController!.navigationBar.frame.size.height + self.navigationController!.navigationBar.frame.origin.y

let constW = NSLayoutConstraint.constraintsWithVisualFormat("V:|-\(heightConstant)-[pageView]-\(self.tabBarController!.tabBar.frame.height)-|", options: .AlignAllTrailing, metrics: nil, views: views)
    view.addConstraints(constW)

换句话说,顶部填充等于导航栏的高度和底部填充等于标签栏的一个。这在纵向模式下工作得很好。

问题是当我旋转设备时,constW没有重新计算,并且在横向模式下,导航栏和页面顶部之间有一个额外的空间导航,因为导航栏的大小没有变化检测

我发现的唯一解决方法是删除viewDidLayoutSubviews中的constH约束,并将其添加回来。但我认为我错过了一些东西,因为它没有遵循" 自动布局"概念

0 个答案:

没有答案