UINavigationBar titleTextAttributes 从视图控制器返回后未更新

Posted

技术标签:

【中文标题】UINavigationBar titleTextAttributes 从视图控制器返回后未更新【英文标题】:UINavigationBar titleTextAttributes not updated after coming back from a View Controller 【发布时间】:2018-04-26 08:31:59 【问题描述】:

我使用UINavigationController 来显示一些视图控制器。每次在两个视图控制器之间切换时,我都需要更改导航栏标题的颜色。这就是我现在正在做的事情:

第一个视图控制器

- (void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];

    self.navigationController.navigationBar.titleTextAttributes = 
         @
              NSForegroundColorAttributeName: [UIColor whiteColor],
              NSFontAttributeName: [UIFont systemFontOfSize:14.0]
         ;

第二个视图控制器

- (void)viewDidLoad:(BOOL)animated

    [super viewDidLoad:animated];

    self.navigationController.navigationBar.titleTextAttributes = 
         @
              NSForegroundColorAttributeName: [UIColor blackColor],
              NSFontAttributeName: [UIFont systemFontOfSize:14.0]
         ;

第一次加载 First VC 时,当我按下 Second VC 时,标题颜色处理正确。这里的问题是,当我从第二个视图控制器弹出到第一个视图控制器时,标题仍然是黑色的,即使 viewWillAppear 被正确调用,如果我打印 self.navigationController.navigationBar.titleTextAttributes,值似乎会更新(NSForegroundColorAttributeName 是白色的)。

【问题讨论】:

你试过viewdidAppear中的代码吗? @PiyushSinroja 是的,没什么不同 【参考方案1】:

可能是因为 push/pop 过渡动画,值没有反映。试着这样称呼它。

- (void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];

    dispatch_async(dispatch_get_main_queue(), ^
        self.navigationController.navigationBar.titleTextAttributes =
        @
            NSForegroundColorAttributeName: [UIColor blackColor],
            NSFontAttributeName: [UIFont systemFontOfSize:14.0]
        ;
    );
    

【讨论】:

如果我这样称呼它,它可以工作,但有一个非常明显的延迟,您可以看到旧格式转换为新格式。我通过在 viewDidDisappear 上将标题设置回 nil 来解决它,并且仅在 viewDidAppear 中应用格式后再次设置标题 设置为 nil 有效。只是想补充一点,您可以将标题设置为 nil,然后在连续行中返回标题文本,以将疯狂保持在一个地方。

以上是关于UINavigationBar titleTextAttributes 从视图控制器返回后未更新的主要内容,如果未能解决你的问题,请参考以下文章

IOS 自定义导航栏标题和返回按钮标题

有没有办法从 Google 表格单元格中获取“标题文本”?

Js + echarts 漏斗图

UINavigationBar titleview 图像未与 UINavigationBar 对齐

由于奇怪的 UINavigationBar 视图层次结构,自定义 UINavigationBar 不起作用

UINavigationBar