我有一个简单的UIViewController与简单的视图 . 作为用户交互的结果,实例化了一个新的UINavigationViewController,并将其视图作为子视图添加到UIViewController的视图中 . 这是作为信息转换(翻转)的一部分进行的 .
这非常有效,并且第一个视图被翻转以支持第二个视图 . 但是当动画结束时(UINavigationViewController的视图填满整个屏幕)导航栏项目跳转,即 Headers 从右向左跳跃大约5-10像素,按钮的跳跃取决于哪一侧(左/右)他们定位 . 在动画期间,您可以看到按钮放错位置,并且跳跃动作是一种重新定位 .
谁能告诉我这个的原因并给我一些建议如何避免这种情况?
4 回答
这有点晚了,但是没有接受的答案,我甚至在最近才遇到过这个问题(尽管在iOS 8上运行了一个较旧的应用程序) .
如果您遇到此问题并且还看到以下行中的警告,则可能是您未在应用委托中正确设置根视图控制器:
最近修改应用程序委托如下为我解决了这个问题:
(我以前有一些几乎相同的代码设置视图,所以一切都在启动时正确显示,但没有专门设置窗口的根视图控制器 . )
我知道这很烦人,但我不知道为什么会这样,但根据我的经验,它发生在以下两种情况之一:
半透明导航栏:也许它与半透明navigationBar有时会设置视图的wantFullScreen属性(视图将在navigationBar下方扩展)这一事实有关 .
过渡期间:正如您所描述的那样 .
为了避免它,可能是一个很好的动画,可以在动画之前和之后在屏幕上淡化它,以免产生低质量的错觉 .
要么
在viewWillAppear中,将它跳转的像素值分配给navigationBar的origin.y . 令人遗憾的是它发生了,但有时它无法以任何其他方式修复 .
这可能是由于当UIImages可以重新调整时,导致条形按钮的部分损坏的PNG可以使用.EdgeEdgeInsets: . 如果您正在使用自定义按钮项目图像,请尝试使用已知可生成可靠图像的技术再次导出它们(请参阅Bjango的Marc Edwards博客文章,以获得良好的开端) .
我最近遇到的问题与您遇到的问题完全相同 . 我发现使用
transitionWithView
里面的[UIView performWithoutAnimation:^{}]
块修复了它 .During custom segue transition, view's navigation bar items are misplaced .