本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗漏或未能一一列举原文出处还望见谅与指出,另文章内容如有不妥之处还望指教,万分感谢。
在iOS 13及以上版本中,使用UINavigationBarAppearance类来设置导航栏的样式,而不再使用UINavigationBar的属性。因此,我们需要将样式赋值给navigationBar的standardAppearance和scrollEdgeAppearance属性,以确保导航栏在不同状态下都能够显示正确的样式
导航栏背景颜色
// 导航栏背景颜色
UIColor *navBarBgColor = [UIColor colorWithHexString:@"#F6F8FA"];
if (@available(iOS 15.0, *)) {
UINavigationBarAppearance *apperance = [[UINavigationBarAppearance alloc] init];
apperance.backgroundColor = navBarBgColor;
self.navigationBar.standardAppearance = apperance;
self.navigationBar.scrollEdgeAppearance = apperance;
} else {
self.navigationBar.barTintColor = navBarBgColor;
}
导航栏文本样式
// 导航栏标题文本样式
NSDictionary *titleStyle = @{
NSForegroundColorAttributeName: [UIColor blackColor],
NSFontAttributeName: [UIFont fontWithName:FontMedium size:19]
};
if (@available(iOS 15.0, *)) {
UINavigationBarAppearance *apperance = [[UINavigationBarAppearance alloc]init];
[apperance setTitleTextAttributes: titleStyle];
self.navigationBar.standardAppearance = apperance;
self.navigationBar.scrollEdgeAppearance = apperance;
} else {
self.navigationBar.titleTextAttributes = titleStyle;
}
之所以适配版本是15,是因为在iOS 13
UINavigationBar新增了scrollEdgeAppearance属性,但在iOS 14及更早的版本中此属性只应用在大标题导航栏上。在iOS 15中此属性适用于所有导航栏
导航栏控件颜色
self.navigationBar.tintColor = UIColor.redColor;