美文网首页ios开发之路
iOS15导航栏barTintColor设置无效及下方黑线无法隐

iOS15导航栏barTintColor设置无效及下方黑线无法隐

作者: 回眸一笑百味生 | 来源:发表于2021-11-01 16:44 被阅读0次

    更新xcode13以后,编译工程,导航栏的问题比较明显。主页问题是UINavigationBar部分属性的设置在iOS15上是无效的

    旧的代码运行成了这样的效果


    截屏2021-11-01 下午4.35.49.png

    下面是之前的的效果图

    截屏2021-11-01 下午4.19.03.png

    最终在苹果论坛看到了解决方案

    在 iOS 15 中,UIKit 将 的使用扩展scrollEdgeAppearance到所有导航栏,默认情况下会产生透明背景。背景由滚动视图何时滚动导航栏后面的内容来控制。您的屏幕截图表明您已滚动到顶部,因此导航栏在滚动时选择scrollEdgeAppearance了standardAppearance它,并且在以前版本的 iOS 上。

    要恢复老样子,你必须采用新UINavigationBar外观的API, UINavigationBarAppearance。下面是兼容老版本写法

    
    let navigationBar = self.navigationController?.navigationBar
            if #available(iOS 15, *) {
                let app = UINavigationBarAppearance.init()
                app.configureWithOpaqueBackground()  // 重置背景和阴影颜色
                app.titleTextAttributes = [
                    NSAttributedString.Key.font: UIFont.systemFont(ofSize: fontSize),
                    NSAttributedString.Key.foregroundColor: titleColor
                ]
                app.backgroundColor = color  // 设置导航栏背景色
                app.shadowImage = imageWithColor(.clear)  // 设置导航栏下边界分割线透明
                navigationBar?.scrollEdgeAppearance = app  // 带scroll滑动的页面
                navigationBar?.standardAppearance = app // 常规页面
            }else{
                // 设置导航栏背景色
                navigationBar?.barTintColor = color
                // 设置导航条上的标题
                navigationBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor:titleColor]
                // 取消半透明效果
                navigationBar?.isTranslucent  = false
                // 设置导航栏返回按钮的颜色
                navigationBar?.tintColor = UIColor.black
    
                let naviItem = UIBarButtonItem.appearance()
                naviItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.black,NSAttributedString.Key.font:UIFont.systemFont(ofSize: fontSize)], for: UIControl.State())
                // 设置导航栏下边界分割线透明
                navigationBar?.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
                navigationBar?.shadowImage = UIImage()
            }
    
    

    参考链接: https://developer.apple.com/forums/thread/682420

    相关文章

      网友评论

        本文标题:iOS15导航栏barTintColor设置无效及下方黑线无法隐

        本文链接:https://www.haomeiwen.com/subject/keozaltx.html