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

Nic*_*chi 8 uinavigationbar uinavigationcontroller ios

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

第一视图控制器

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.navigationController.navigationBar.titleTextAttributes = 
         @{
              NSForegroundColorAttributeName: [UIColor whiteColor],
              NSFontAttributeName: [UIFont systemFontOfSize:14.0]
         };
}
Run Code Online (Sandbox Code Playgroud)

第二视图控制器

- (void)viewDidLoad:(BOOL)animated
{
    [super viewDidLoad:animated];

    self.navigationController.navigationBar.titleTextAttributes = 
         @{
              NSForegroundColorAttributeName: [UIColor blackColor],
              NSFontAttributeName: [UIFont systemFontOfSize:14.0]
         };
}
Run Code Online (Sandbox Code Playgroud)

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

小智 3

也许是因为推/弹出过渡动画,值没有反映。尝试这样称呼它。

- (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]
        };
    });
}    
Run Code Online (Sandbox Code Playgroud)

  • 如果我这样称呼它,它可以工作,但是有一个非常明显的延迟,您可以看到旧格式转换为新格式。我通过在 viewDidDisappear 上将标题设置回 nil 来解决这个问题,并且只有在 viewDidAppear 中应用格式后才再次设置标题 (4认同)