RTRootNavigationController icon indicating copy to clipboard operation
RTRootNavigationController copied to clipboard

iOS15导航问题

Open TomasWell opened this issue 3 years ago • 5 comments

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,向上画一下就变成了白色,希望大佬能关注到这个问题

TomasWell avatar Sep 26 '21 06:09 TomasWell

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;

这个也配置一下就行了

SpaceBlueFish avatar Sep 28 '21 03:09 SpaceBlueFish

感谢

TomasWell avatar Sep 28 '21 09:09 TomasWell

[UINavigationBar appearance] 是全局设置,当存在个别页面需要隐藏导航栏时不适用。 从源码 RTRootNavigationController.m 的 188 行前后上下文分析,加入以下代码可以分开设置从而达到效果。 fix.md

wj19910 avatar Oct 30 '21 17:10 wj19910

    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 来修改 当前导航条的背景了

LuKane avatar Nov 25 '21 07:11 LuKane

    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

LCBbest avatar Dec 06 '21 05:12 LCBbest