在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];
}
正确答案是:
- (void)willMoveToParentViewController:(UIViewController *)parent {
if (!parent) {
self.navigationController.navigationBar.titleTextAttributes = @{
NSForegroundColorAttributeName: [UIColor blackColor]
};
}
}
谢谢@Phu Nguyen
3 回答
你在第二个视图控制器中试过这个吗?
在您的第一个屏幕viewWillAppear()中,保持 Headers 文本颜色为黑色,在第二个屏幕中保持WillAppear(),将其保持为粉红色 .
我想你在Screen2上改了你的
navigationbarTitleColor
. 删除navigationBar
Appearance
代码并检查它 .(要么)
如果您需要更改Screen2上的
navigationBarTitleColor
表示 . 你必须在viewWillAppear
更新Screen1上的navigationBarTitleColor