iOS15新特性兼容适配

作者: 冬冬吧 | 来源:发表于2021-08-24 11:24 被阅读0次

    背景

    按照往年新系统发布的时间规律,新的系统预计在9月20日左右发布,目前beta版本已经更新到beta6。
    想必都看过WWDC2021的Session了,Session原版视频依然是最有效的get新特性的渠道,iOS15多的特性就不说了,我就整理了我在适配iOS15路上的一些更改和调整。适配以iOS15 beta6和xcode13 beta5为环境基础

    AppIcon

    真机构建App,发现在真机上AppIcon没有显示,我尝试模拟器构建,发现icon正常显示的。尝试重启iphone后,AppIcon正常显示了,我又删除app再次构建,还是不显示,目前还没找到原因,疑似是bug,还将持续关注这个问题

    • 临时解决方案:真机构建安装后,重启真机。
    • 这个问题已经在8月25日iOS15 beta7上已经没有了

    UINavigationBar

    用新xcode13编译工程后,导航栏的问题比较明显,调试之后发现是UINavigationBar部分属性的设置在iOS15上是无效的

    • 旧代码
    navigationBar.setBackgroundImage(UIColor.clear.image, for: .default)
    // 导航栏背景,主题色是绿色
    navigationBar.barTintColor = UIColor.theme
    // 默认不透明
    navigationBar.isTranslucent = false
    // 着色,让返回按钮图片渲染为白色
    navigationBar.tintColor = UIColor.white
    // 导航栏文字
    navigationBar.titleTextAttributes = [
         NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18),
         NSAttributedString.Key.foregroundColor: UIColor.white
    ]
    

    run起来后发现,导航栏颜色设置没有作用,呈现是白色,字体颜色也没有生效,呈现黑色,查看导航栏特性API:UINavigationBarAppearance后发现,iOS15navigationBar的相关属性设置要通过实例UINavigationBarAppearance来实现,UINavigationBarAppearance是iOS13更新的API,应该有人已经在用,我们的应用兼容iOS10以上,对于导航栏的设置还没有使用UINavigationBarAppearance,如今在iOS15上失效,所以对于呈现的问题,做如下适配:

    • 新代码
    ......
    if #available(iOS 15, *) {
        let app = UINavigationBarAppearance.init()
        app.configureWithOpaqueBackground()  // 重置背景和阴影颜色
        app.titleTextAttributes = [
            NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18),
            NSAttributedString.Key.foregroundColor: UIColor.white
        ]
        app.backgroundColor = UIColor.theme  // 设置导航栏背景色
        app.shadowImage = UIColor.clear.image  // 设置导航栏下边界分割线透明
        navigationBar.scrollEdgeAppearance = app  // 带scroll滑动的页面
        navigationBar.standardAppearance = app // 常规页面
    }
    ......
    

    UITabbar

    tabbar的问题和navigationBar的问题属于同一类,tabbar背景颜色设置失效,字体设置失效,阴影设置失效问题

    • 旧代码
    ......
    self.tabBar.backgroundImage = UIColor.white.image
    self.tabBar.shadowImage = UIColor.init(0xEEEEEE).image
    item.setTitleTextAttributes(norTitleAttr, for: .normal)
    item.setTitleTextAttributes(selTitleAttr, for: .selected)
    ......
    

    首先是背景色设置失效,让我就想到了navigationbar的问题,所以没有查api了
    直接用UITabBarAppearance来设置,

    • 新代码
    ......
    if #available(iOS 15, *) {
        let bar = UITabBarAppearance.init()
        bar.backgroundColor = UIColor.white
        bar.shadowImage = UIColor.init(0xEEEEEE).image
        let selTitleAttr = [
            NSAttributedString.Key.font: itemFont,
            NSAttributedString.Key.foregroundColor: UIColor.theme
        ]
        bar.stackedLayoutAppearance.selected.titleTextAttributes = selTitleAttr // 设置选中attributes
        self.tabBar.scrollEdgeAppearance = bar
        self.tabBar.standardAppearance = bar
    }
    ......
    

    UITableView

    iOS15对于tableview,新增了sectionHeaderTopPadding作为列表每个部分标题上方的填充,它的默认值是UITableViewAutomaticDimension,所以我们要将他设置为0,否则当我们的列表设置了section高度的列表会出现head高度增加的情况,适配方式:

    ......
    if #available(iOS 15, *) {
        tableView.sectionHeaderTopPadding = 0
    }
    ......
    

    结尾

    目前看iOS15适配工作量较小,后续发现新的适配内容我也会同步更新。

    相关文章

      网友评论

        本文标题:iOS15新特性兼容适配

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