首页 文章

Animate控制向下,更改为UINavigationBar

提问于
浏览
0

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

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

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

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

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

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

1 回答

  • 1

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

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

相关问题