iOS 适配导航栏样式

1,072 阅读1分钟

本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗漏或未能一一列举原文出处还望见谅与指出,另文章内容如有不妥之处还望指教,万分感谢。

iOS 13及以上版本中,使用UINavigationBarAppearance类来设置导航栏的样式,而不再使用UINavigationBar的属性。因此,我们需要将样式赋值给navigationBarstandardAppearancescrollEdgeAppearance属性,以确保导航栏在不同状态下都能够显示正确的样式

导航栏背景颜色

// 导航栏背景颜色
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 13UINavigationBar新增了scrollEdgeAppearance属性,但在iOS 14及更早的版本中此属性只应用在大标题导航栏上。在iOS 15中此属性适用于所有导航栏

导航栏控件颜色

    self.navigationBar.tintColor = UIColor.redColor;