翻转过渡后右侧导航栏标题

时间:2012-02-08 20:58:09

标签: iphone uinavigationcontroller uinavigationbar transition uinavigationitem

我有一个简单的UIViewController,它有一个简单的视图。作为用户交互的结果,实例化了一个新的UINavigationViewController,并将其视图作为子视图添加到UIViewController的视图中。这是作为一个动态过渡(翻转)的一部分。

这非常有效,并且第一个视图被翻转以支持第二个视图。但是当动画结束时(UINavigationViewController的视图填满整个屏幕)导航栏项目跳转,即标题从右向左跳跃大约5-10像素,按钮的跳跃取决于哪一侧(左/右)他们定位。在动画期间,您可以看到按钮放错位置,跳跃动作是一种重新定位。

有谁可以告诉我这个的原因并给我一些建议如何避免这个?

4 个答案:

答案 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)

我知道这很烦人,但我不知道为什么会这样,但根据我的经验,它发生在以下两种情况之一:

  1. 半透明导航栏:也许它与半透明navigationBar有时设置视图的wantFullScreen属性这一事实有关(视图将在navigationBar下方延伸)。

  2. 过渡期间:如您所述。

  3. 为了避免这种情况,也许是一个很好的动画,可以在动画前后的屏幕上淡化它,以免产生低质量的幻觉。

    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