导航控制器自定义titleView仅根控制器生效 需替换topItem吗
问题原因
你使用的navigationController?.navigationBar.topItem指向的是导航栈最底部的根视图控制器对应的导航项,所以只有根控制器配置时生效。当你push新的ViewController实例时,新实例自身的导航项没有被修改,因此只会显示默认标题。
修复方案
不要通过导航栏获取item,直接访问当前ViewController自带的navigationItem属性配置标题视图即可,该属性对应当前控制器在导航栏上的专属配置项,无论当前控制器是根节点还是push出的新实例都能生效。
修正后代码如下:
let titleView = Bundle.main.loadNibNamed("TitleView", owner: self, options: nil)?[0] as? TitleView navigationItem.titleView = titleView
补充注意项
如果修改后titleView仍无显示,可以检查自定义的TitleView是否设置了明确的尺寸:你可以给TitleView添加固定宽高约束,也可以在TitleView的实现中重写intrinsicContentSize属性返回固定大小,避免因布局尺寸异常导致视图不展示。
内容的提问来源于stack exchange,提问作者Ginso
相关产品推荐
相关产品推荐

