Animate控制向下,更改为UINavigationBar

时间:2013-11-18 16:37:36

标签: ios objective-c ipad uinavigationbar autolayout

我有一个带有标准UINavigationBar的UINavigationController。当呈现某些UIViewControllers和方向时,UINavigationBar可能会也可能不会出现,它可能有也可能没有提示元素。这意味着条形高度经常变化。

我在UINavigationBar下面有一些子视图,其中NSLayoutConstraints设置为topLayoutGuide。它通常按预期布局,根据UINavigationBar的高度适当调整子视图的垂直位置。它不会做的是在已经显示视图后动画UINavigationBar时移动子视图。

具体来说,来自隐藏UINavigationBar的状态,转换到UIViewController,它不会将导航栏隐藏到其中。视图显示,然后导航栏动画到位。子视图不会向下移动。如果我旋转设备,每个东西都会再次适当地布局。只有在进出动画导航栏或显示/隐藏提示时,我才找不到重新评估约束的钩子。

我在各种地方尝试了[self.view updateConstraints][self.view updateConstraintsIfNeeded],例如viewDidAppear,viewDidLayoutSubviews。似乎没有更新topLayoutConstraint。

我熟悉边缘限制,半透明导航栏以及其他各种方法,以防止整个视图出现在导航栏下方。我想保持全尺寸视图,我想要半透明条,所以这些不是我的解决方案。似乎约束应该自动处理,因此自动布局中的“自动”。

为简化娱乐,UINavigationController与rootViewcontroller显示只有标题的普通导航栏。在下一个呈现的viewController的viewDidLoad中,我有[self.navigationContoller setPrompt:self.myPrompt]。显示视图,当设置提示时,导航栏变大。栏下方的某些标签与topLayoutGuide相关,后者最初正确放置。我希望他们会在酒吧成长时向下移动。前后旋转设备,它们现在正确布局。弹出viewController并按回到顶部,重复如上所述。

1 个答案:

答案 0 :(得分:1)

所以,事实证明这就是我的全部。在以各种方式尝试各种强制布局更新之后,解决方案是将[myView setPrompt:myPrompt]移出viewDidLoad并在viewDidAppear中调用它。

完全按预期工作。 Navbar增长,子视图根据需要移动和缩小。现在我必须找到所有试验性错误的实验代码。