UIViewController“后退”过渡期间,UINaviagtionBar 子视图不会淡出

Posted

技术标签:

【中文标题】UIViewController“后退”过渡期间,UINaviagtionBar 子视图不会淡出【英文标题】:UINaviagtionBar subview doesn't fade out during UIViewController "Back" transition 【发布时间】:2014-03-10 18:15:04 【问题描述】:

我有一个基于 UINavigationBar 的应用程序。我创建了一个带有一些标题的自定义 UIView 并将其作为子视图添加到导航栏:

[self.navigationController.navigationBar addSubview:_navbarView];

一切正常,直到我点击导航栏中的后退按钮并发生 UIViewController 转换。

问题是我的自定义视图不会像 UINavigationBar 中的其他元素一样消失,它只是保持不变并在转换完成时消失。 我希望它在过渡过程中像 UINavigationBar 的原生元素一样消失,有什么方法可以实现吗?

【问题讨论】:

【参考方案1】:

如果你在导航栏上添加一个子视图,那么它就会一直呆在那里;导航控制器不知道对它做任何特别的事情。您说您的自定义视图有“一些标题” - 您是否尝试过这样做?

self.navigationItem.titleView = _navbarView;

然后导航控制器知道应该使用视图来代替控制器的标题,并且它应该动画进出。

如果这不起作用,您需要考虑成为导航控制器的委托。从 ios7 开始,这可能会变得相当复杂。

【讨论】:

完美答案!将它添加为 navigationItem 的 titleView 提供了我正在寻找的动画。很好的解释和解决方案!【参考方案2】:

如果您需要自定义导航栏,最好使用自定义 UINavigationBar 创建 UINavigationController

- (instancetype)initWithNavigationBarClass:(Class)navigationBarClass toolbarClass:(Class)toolbarClass 

您可以在导航栏类中实现

- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated

    if (animated) 
        //your_problem_view animation here
    
    [super popNavigationItemAnimated];

【讨论】:

这似乎是一个顺利的解决方案,但我应该在那个条件中输入什么代码? mi自定义view的淡出动画? 是的。自定义视图的淡出动画。

以上是关于UIViewController“后退”过渡期间,UINaviagtionBar 子视图不会淡出的主要内容,如果未能解决你的问题,请参考以下文章

推送新的 UIViewController 时 UISearchController 消失

同时 UIViewController 过渡动画

UIViewController 从 viewController 和后退按钮模态加载 UINavigationController [重复]

如何在 uiviewcontroller 的导航栏中添加后退按钮?

为所有 UIViewController 实例设置全局默认后退按钮显示模式

UIPageViewController 从子 UIViewController 上的控制过渡