多个故事板的自动布局问题

时间:2016-07-07 23:21:27

标签: ios xcode swift2 autolayout storyboard

如果我使用1 uiviewcontroller创建一个简单的应用程序,并将其嵌入导航栏,则输出以下代码

override func viewDidAppear(animated: Bool) {

print ("...app height is \(UIScreen.mainScreen().bounds.height)")
print ("...win height is \(self.view.frame.size.height)")

}

导致以下结果:

...app height is 1024.0 
...win height is 980.0
我认为,有点意义,因为大小的差异导致了导航栏的高度,即44分。

现在,我对使用多个故事板的应用程序有疑问,当我从一个故事板转换到另一个故事板时,相同的代码将返回:

...app height is 1024.0
...win height is 1024.0

奇怪,因为两个故事板都有一个嵌入在导航控制器中的uiview。这会导致自动布局问题,因为导航栏的大小未被考虑在内。但是,如果我旋转视图或远离它,问题似乎就解决了。

所以,最后,问题是:如何确保导航栏的正确计算,以便在故事板之间导航时不会出现布局问题?我试过强制setNeedsDisplay()和setNeedsLayout()无济于事。任何想法/想法/更正都将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果您希望视图位于导航栏下方(即始终与屏幕高度相同),请设置self.edgesForExtendedLayout = UIRectEdgeAll(Objc-C),然后执行相反操作(不要隐藏在任何栏后面) ):self.edgesForExtendedLayout = UIRectEdgeNone

修改

还添加self.extendedLayoutIncludesOpaqueBars = YES

很抱歉把所有代码放在Objective-C中,我对Swift不是很熟悉,但是方法也应该这样做,它们可能只是用不同的名字来定义

答案 1 :(得分:0)

我真的不明白为什么会发生这种情况,(即视图没有注册导航栏的存在以设置其大小)。但是,正如this主题所指出的那样,改变视图框架的大小和注册似乎可以解决问题。将以下代码添加到viewDidLoad()可以解决问题:

var viewFrame = self.view.frame
let viewNavBarHeight = self.navigationController?.navigationBar.frame.height
viewFrame.origin.y = viewNavBarHeight!
viewFrame.size.height = viewFrame.height - viewNavBarHeight!
self.view.frame = viewFrame