【发布时间】:2023-03-07 21:00:01
【问题描述】:
有没有一种方法可以在导航控制器中的视图之间转换而不用动画标题?
我正在创建一个向用户询问问题的应用程序,当他们单击下一个时,一个新问题被推送到 NavigationStack 并被动画化。但标题栏也是动画化的。标题栏上的标题没有改变,有没有办法让标题栏停止动画?
谢谢
【问题讨论】:
标签: iphone uinavigationcontroller core-animation
有没有一种方法可以在导航控制器中的视图之间转换而不用动画标题?
我正在创建一个向用户询问问题的应用程序,当他们单击下一个时,一个新问题被推送到 NavigationStack 并被动画化。但标题栏也是动画化的。标题栏上的标题没有改变,有没有办法让标题栏停止动画?
谢谢
【问题讨论】:
标签: iphone uinavigationcontroller core-animation
我认为这个问题没有任何直接的解决方案。但我觉得这是可以实现的。您可以拥有一个导航控制器。当您从导航控制器推送下一个视图时,您可能不得不躲避一些自定义动画。
我认为你可以做的是,你可以将下一个视图作为子视图添加到一个框架中
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。
这看起来像是在推动视图,但您只是通过添加为子视图来创建它的效果。
希望这可以为您的解决方案提供一种方法。
【讨论】:
我遇到了同样的问题(在我的例子中,我添加到导航控制器的每个孩子都有相同的标题,所以动画标题看起来很有趣)
我通过将标题直接添加到导航控制器并将子控制器的标题设置为 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;
【讨论】:
您可以通过以下方式停止动画:
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:NO];
并确保将推送的视图控制器的标题设置为(相同的)正确标题;例如在详细视图控制器的viewDidLoad 方法中做:
self.title = @"title";
现在,您可以添加一个自定义 initWithTitle: 方法,例如,向您详细的视图控制器自定义类传入您需要设置的标题,如果标题需要更改,而不像您在问题中提到的那样。
希望这会有所帮助。
【讨论】:
NO,如果您确保标题字段相同,则它不会动画。我会尝试找到我用来测试它的骨架项目..
您可以使用分页的UIScrollView 而不是UINavigationController。在 IB 中设置您的视图,在视图顶部使用 UINavigationBar,在视图正下方放置 UIScrollview,让用户以这种方式滚动浏览您的问题。
【讨论】: