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