【问题标题】:UINavigationController animating view but not headerUINavigationController 动画视图但不是标题
【发布时间】:2023-03-07 21:00:01
【问题描述】:

有没有一种方法可以在导航控制器中的视图之间转换而不用动画标题?

我正在创建一个向用户询问问题的应用程序,当他们单击下一个时,一个新问题被推送到 NavigationStack 并被动画化。但标题栏也是动画化的。标题栏上的标题没有改变,有没有办法让标题栏停止动画?

谢谢

【问题讨论】:

    标签: iphone uinavigationcontroller core-animation


    【解决方案1】:

    我认为这个问题没有任何直接的解决方案。但我觉得这是可以实现的。您可以拥有一个导航控制器。当您从导航控制器推送下一个视图时,您可能不得不躲避一些自定义动画。

    我认为你可以做的是,你可以将下一个视图作为子视图添加到一个框架中

    x = 350( anything beyond the view frame i.e 320, assuming iphone) , 
    y = 0 , 
    width = 320 and 
    height = view height - 20 (20 is the height of navigation bar)
    

    您可以将下一个视图作为子视图添加到现有导航控制器,而不是从导航控制器推送视图,并为视图提供一些自定义动画,同时将 x 值从 350 更改为 0。

    这看起来像是在推动视图,但您只是通过添加为子视图来创建它的效果。

    希望这可以为您的解决方案提供一种方法。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题(在我的例子中,我添加到导航控制器的每个孩子都有相同的标题,所以动画标题看起来很有趣)

      我通过将标题直接添加到导航控制器并将子控制器的标题设置为 nil 解决了这个问题

      UINavigationController *nav_controller;
      
      UILabel *lbl_title = [[UILabel alloc] initWithFrame:...]
      // Modify your title here
      
      [nav_controller.view addSubview:lbl_title];
      
      UIViewController *vc_child;
      vc_child.title = nil;
      

      【讨论】:

        【解决方案3】:

        您可以通过以下方式停止动画:

        // Pass the selected object to the new view controller.
        [self.navigationController pushViewController:detailViewController animated:NO];
        

        并确保将推送的视图控制器的标题设置为(相同的)正确标题;例如在详细视图控制器的viewDidLoad 方法中做:

        self.title = @"title";
        

        现在,您可以添加一个自定义 initWithTitle: 方法,例如,向您详细的视图控制器自定义类传入您需要设置的标题,如果标题需要更改,而不像您在问题中提到的那样。

        希望这会有所帮助。

        【讨论】:

        • 设置标题没问题,我确实在每个viewController中设置了标题。导航树中的所有 viewController 不会改变并且相同。我要做的是停止标题动画,并在视图被推入/弹出堆栈时为视图设置动画。
        • 呃,应该可以吧?如果您推送详细的视图控制器(如代码片段中所示),并将 animated 设置为 NO,如果您确保标题字段相同,则它不会动画。我会尝试找到我用来测试它的骨架项目..
        • 当 animated 设置为 NO 时,没有任何动画。我仍然希望主视图动画,我只是希望标题不动画。
        • 我明白了,滚动视图类型的行为将是继续进行的方式 - 我在另一条评论中看到,现在为时已晚?因为您可以为滚动视图设置内容偏移量,所以这确实是现在实现您的行为的方式。
        【解决方案4】:

        您可以使用分页的UIScrollView 而不是UINavigationController。在 IB 中设置您的视图,在视图顶部使用 UINavigationBar,在视图正下方放置 UIScrollview,让用户以这种方式滚动浏览您的问题。

        【讨论】:

        • 我没有想到分页的 UIScrollView,我已经使用 UINavigationController 构建了我的大部分应用程序,因此现在更改它为时已晚,但要记住未来的事情。
        猜你喜欢
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-01
        • 2018-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多