使用UINavigationController进行iOS7自定义转换

Ala*_*lan 4 uinavigationcontroller ios uistatusbar ios7

我使用iOS7自定义过渡以模态方式呈现新的视图控制器.

新的视图控制器是导航控制器.

控制器从底部开始动画,而背景视图模糊.

我的问题是,新控制器上的导航栏虽然向上动画,但似乎允许状态栏,即它似乎高64点.当它到达最终位置并调用completeTransition时,它意识到不需要状态栏空间并快速回到44点.

有办法吗?

  • 最初通知导航控制器/顶视图控制器不需要状态栏.要么
  • 在动画之前调用completeTransition正在调用的任何方法,以便随后进行自动重新调整.

动画制作时:

动画时

动画完成:

动画完成

Ala*_*lan 7

诀窍是将显示的视图控制器的视图添加到容器视图后,将其初始位置设置在屏幕底部.这可以防止容器视图认为它位于屏幕顶部并相应地自动布局状态栏.

它与IOS 7中的状态栏和导航栏上的以下内容有关:

"UINavigationController会将其UINavigationBar的高度改为44点或64点,具体取决于一组相当奇怪且未记录的约束.如果UINavigationController检测到其视图的顶部框架在视觉上与其UIWindow顶部相邻,则会绘制它的导航栏高度为64点.如果它的视图顶部与UIWindow的顶部不相邻(即使只关闭一个点),那么它以"传统"方式绘制其导航栏,高度为44点.即使在应用程序的视图控制器层次结构中存在多个子节点,该逻辑也由UINavigationController执行.无法阻止此行为."