首页 文章

翻转过渡后右侧导航栏 Headers

提问于
浏览
2

我有一个简单的UIViewController与简单的视图 . 作为用户交互的结果,实例化了一个新的UINavigationViewController,并将其视图作为子视图添加到UIViewController的视图中 . 这是作为信息转换(翻转)的一部分进行的 .

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

谁能告诉我这个的原因并给我一些建议如何避免这种情况?

4 回答

  • 1

    这有点晚了,但是没有接受的答案,我甚至在最近才遇到过这个问题(尽管在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

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

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

    • 过渡期间:正如您所描述的那样 .

    为了避免它,可能是一个很好的动画,可以在动画之前和之后在屏幕上淡化它,以免产生低质量的错觉 .

    要么

    在viewWillAppear中,将它跳转的像素值分配给navigationBar的origin.y . 令人遗憾的是它发生了,但有时它无法以任何其他方式修复 .

  • 3

    这可能是由于当UIImages可以重新调整时,导致条形按钮的部分损坏的PNG可以使用.EdgeEdgeInsets: . 如果您正在使用自定义按钮项目图像,请尝试使用已知可生成可靠图像的技术再次导出它们(请参阅Bjango的Marc Edwards博客文章,以获得良好的开端) .

  • 1

    我最近遇到的问题与您遇到的问题完全相同 . 我发现使用 transitionWithView 里面的 [UIView performWithoutAnimation:^{}] 块修复了它 .

    During custom segue transition, view's navigation bar items are misplaced .

相关问题