RTRootNavigationController
RTRootNavigationController copied to clipboard
iOS15导航问题
if (@available(iOS 15.0, *)) {
[[UINavigationBar appearance] setScrollEdgeAppearance:({
UINavigationBarAppearance *app = [UINavigationBarAppearance new];
[app configureWithDefaultBackground];
// init app property
app.backgroundColor = UIColorHex(0x163a59);
app.shadowColor = UIColorHex(0x163a59);
app;
})];
}
你好,根据这个配置颜色,如果vc里面有tableview,向上画一下就变成了白色,希望大佬能关注到这个问题
if (@available(iOS 15.0, *)) { [[UINavigationBar appearance] setScrollEdgeAppearance:({ UINavigationBarAppearance *app = [UINavigationBarAppearance new]; [app configureWithDefaultBackground]; // init app property app.backgroundColor = UIColorHex(0x163a59); app.shadowColor = UIColorHex(0x163a59); app; })]; }
你好,根据这个配置颜色,如果vc里面有tableview,向上画一下就变成了白色,希望大佬能关注到这个问题
[UINavigationBar appearance].standardAppearance = app;
这个也配置一下就行了
感谢
[UINavigationBar appearance]
是全局设置,当存在个别页面需要隐藏导航栏时不适用。
从源码 RTRootNavigationController.m 的 188 行前后上下文分析,加入以下代码可以分开设置从而达到效果。
fix.md
var setNavigationType: Int {
set {
if #available(iOS 15.0, *) {
if newValue == 0 {
let app = UINavigationBarAppearance.init()
app.configureWithDefaultBackground() /// 设置默认背景
app.backgroundImage = nil /// 导航条背景 : 一张图片
app.backgroundColor = JFTMainColor /// 导航条背景 : 纯颜色
app.backgroundEffect = nil /// 导航条背景 : 是否要一个 模糊效果
app.shadowImage = nil /// 导航条最下方的一条线 : 一张图片
app.shadowColor = UIColor.clear /// 导航条最下方的一条线 : 纯颜色
app.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] /// 导航条title的颜色 || 大小
navigationController?.navigationBar.scrollEdgeAppearance = app
navigationController?.navigationBar.standardAppearance = app
}else {
}
} else {
if newValue == 0 { // 主颜色
navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white ,NSAttributedString.Key.font : UIFont.systemFont(ofSize: 18)]
navigationController?.navigationBar.barTintColor = JFTMainColor
}else {
}
}
}
get {
return 0
}
}
针对iOS15.0以后 我的做法 : 在 基类控制器中 用一个 setNavigationType 来表示, 可以设置默认值 特殊的几个页面: 导航条背景是图片 || 导航条背景是其他颜色 || 导航条背景是透明色 这样继承这个 基类控制器就可以 通过设置 setNavigationType 来修改 当前导航条的背景了
var setNavigationType: Int { set { if #available(iOS 15.0, *) { if newValue == 0 { let app = UINavigationBarAppearance.init() app.configureWithDefaultBackground() /// 设置默认背景 app.backgroundImage = nil /// 导航条背景 : 一张图片 app.backgroundColor = JFTMainColor /// 导航条背景 : 纯颜色 app.backgroundEffect = nil /// 导航条背景 : 是否要一个 模糊效果 app.shadowImage = nil /// 导航条最下方的一条线 : 一张图片 app.shadowColor = UIColor.clear /// 导航条最下方的一条线 : 纯颜色 app.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] /// 导航条title的颜色 || 大小 navigationController?.navigationBar.scrollEdgeAppearance = app navigationController?.navigationBar.standardAppearance = app }else { } } else { if newValue == 0 { // 主颜色 navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white ,NSAttributedString.Key.font : UIFont.systemFont(ofSize: 18)] navigationController?.navigationBar.barTintColor = JFTMainColor }else { } } } get { return 0 } }
针对iOS15.0以后 我的做法 : 在 基类控制器中 用一个 setNavigationType 来表示, 可以设置默认值 特殊的几个页面: 导航条背景是图片 || 导航条背景是其他颜色 || 导航条背景是透明色 这样继承这个 基类控制器就可以 通过设置 setNavigationType 来修改 当前导航条的背景了
666