首页 文章

iPhone导航栏 Headers 文本颜色在iOS 11中的功能viewWillAppear()或viewWillDisappear中不会更改

提问于
浏览
5

在iOS 10中没有发生错误 . Headers 文本颜色的默认值是黑色,导航到新屏幕时(2)我在viewWillAppear()中将 Headers 文本颜色更改为粉红色,在viewWillDisappear中我将其更改为默认颜色 . iOS 10的逻辑是正常的,但是对于iOS 11,第一个具有条形 Headers 颜色的屏幕是粉红色(预期是默认颜色)

另外:当在viewWillAppear()中添加逻辑变色时(颜色在这种情况下没有变化)但是 this work in viewDidAppear() ,但是有错误,从屏幕2返回到屏幕1时 Headers 闪烁变色

屏幕2中的源代码(适用于iOS 10):

#define NAVBAR_TITLE_FONT_ATTR @{ UITextAttributeFont : [UIFont boldSystemFontOfSize:19], UITextAttributeTextColor: [UIColor colorWithRed:9/255.0 green:34/255.0 blue:83/255.0 alpha:1]}
#define NAVBAR_TINT_COLOR [UIColor colorWithRed:97/255.0 green:113/255.0 blue:146/255.0 alpha:1]
#define NAVBAR_BG_COLOR [UIColor colorWithRed:247/255.0 green:247/255.0 blue:247/255.0 alpha:1]
#define LIGHT_BLUE_COLOR [UIColor colorWithRed:0.04 green:0.13 blue:0.33 alpha:1.0]


-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new]                                              forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = [UIImage new];
    self.navigationController.navigationBar.translucent = YES;
    self.navigationController.view.backgroundColor = [UIColor clearColor];
    textColor = [UIColor pinkColor] 
    self.navigationController.navigationBar.tintColor = textColor;
    self.navigationController.navigationBar.titleTextAttributes =  [NSDictionary dictionaryWithObjectsAndKeys:
                                                                    textColor, NSForegroundColorAttributeName,
                                                                    [UIFont boldSystemFontOfSize:19], NSFontAttributeName,nil];

}

-(void)viewWillDisappear:(BOOL)animated {

    [super viewWillDisappear:animated];

    self.navigationController.navigationBar.tintColor = NAVBAR_TINT_COLOR;
    self.navigationController.navigationBar.barTintColor = NAVBAR_BG_COLOR;
    self.navigationController.navigationBar.translucent = NO;
    [self.navigationController.navigationBar setTitleTextAttributes:NAVBAR_TITLE_FONT_ATTR];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}

screen 1

screen 2

come back screen 1

正确答案是:

- (void)willMoveToParentViewController:(UIViewController *)parent {

    if (!parent) {
        self.navigationController.navigationBar.titleTextAttributes =  @{
                                                                         NSForegroundColorAttributeName: [UIColor blackColor]
                                                                         };

 }

}

谢谢@Phu Nguyen

Detecting when the 'back' button is pressed on a navbar

3 回答

  • 0

    你在第二个视图控制器中试过这个吗?

    - (void)willMoveToParentViewController:(UIViewController *)parent {
      [super willMoveToParentViewController:parent];
        NSLog(@"Parent view controller: %@", parent);
        if (!parent) {
            self.navigationController.navigationBar.titleTextAttributes =  @{
                                                                             NSForegroundColorAttributeName: [UIColor blackColor]
                                                                             };
        }
    }
    

    enter image description here

  • 7

    在您的第一个屏幕viewWillAppear()中,保持 Headers 文本颜色为黑色,在第二个屏幕中保持WillAppear(),将其保持为粉红色 .

  • 0

    我想你在Screen2上改了你的 navigationbarTitleColor . 删除 navigationBar Appearance 代码并检查它 .

    (要么)

    如果您需要更改Screen2上的 navigationBarTitleColor 表示 . 你必须在 viewWillAppear 更新Screen1上的 navigationBarTitleColor

相关问题