iOS15新特性、iOS15适配

一、iOS15新特性

1.1、iOS15兼容的设备

9.21  iOS15.0正式版

iPhone6S以上,包括SE第一/二代,iPod touch第七代

具体6s、6sPlus、7、7Plus、8、8plus、X、XR、XsMax、Xs、11、11Pro、11ProMax、12、12Pro、12ProMax、12mini、13、13Pro、13ProMax、13mini

1.2、iOS15新特性

专注模式,就是确保用户在一个时间段里屏蔽各种骚扰、非必要的内容不看不听,来提升做其他事情的效率。苹果做了各种细致分类,能进行量身定制。

NFC增强版 NFC能模拟公交卡、门禁卡等,能把手机强化为卡证管理平台,在中高端安卓手机很普及。苹果的NFC功能限制非常多,要与指定的开发商合作才能启用,故实用性低。

看图识字 图中文字能提取出来进行复制分享。

FaceTime 提供人物虚化功能、麦克风选收听人声或全场景声

二、iOS15适配

Xcode13编译工程后,问题:

2.1、NavigationBar

问题:导航栏问题比较明显,有的变白色,有的变黑色。(我们项目里有navigationBar原本白色现在变成灰色)

原因:UINavigationBar 部分属性的设置在 iOS15 上是无效的。

解决办法:查看导航栏API,iOS15的导航栏属性需用UINavigationBarAppearance(iOS13更新的API)来实现。

swift

        if #available(iOS 13.0, *) {
            let appearance = UINavigationBarAppearance()
              // 设置导航栏背景色
            appearance.backgroundColor = .white
              // 去除导航栏阴影(如果不设置clear,导航栏底下会有一条阴影线)
            appearance.shadowColor = UIColor.clear
              // 字体颜色
            appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
            // 带scroll滑动的页面
            navigationController?.navigationBar.scrollEdgeAppearance = appearance
            // 常规页面
            navigationController?.navigationBar.standardAppearance = appearance 
        }

Objective-C

    if (@available(iOS 13.0, *)) {
        UINavigationBarAppearance * appearance = [[UINavigationBarAppearance alloc] init];
        // 背景色
        appearance.backgroundColor = [UIColor whiteColor];
        // 去除导航栏阴影(如果不设置clear,导航栏底下会有一条阴影线)
        appearance.shadowColor = [UIColor clearColor];
        // 字体颜色
        appearance.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor redColor]};
        // 带scroll滑动的页面
        self.navigationController.navigationBar.scrollEdgeAppearance = appearance;
        // 常规页面
        self.navigationController.navigationBar.standardAppearance = appearance;
    }

对NavigationBar是白底黑字的app影响不大

2.2、UITabBar

背景色失效 (这个问题在我们项目里其中一个tab下存在)

swift

        if #available(iOS 13.0, *) { 
            let appearance = UITabBarAppearance()
           // 背景色
            appearance.backgroundColor = .white
            tabBar.standardAppearance = appearance
            if #available(iOS 15.0, *) {
                tabBar.scrollEdgeAppearance = appearance
            }
        } 

Objective-C

    if (@available(iOS 13.0, *)) { 
        UITabBarAppearance * appearance = [[UITabBarAppearance alloc] init];
         // 背景色
        appearance.backgroundColor = [UIColor whiteColor];
        self.tabBar.standardAppearance = appearance; 
        if (@available(iOS 15.0, *)) {
            self.tabBar.scrollEdgeAppearance = appearance;
        }
    }

2.3 TableView

问题:a).初始化 UITableView用UITableViewStylePlain样式,发现 sectionHeader 增高了 22px

(这个问题在我们项目里也是有遇到的)

原因:iOS 15 的 UITableView 新增了一条新属性:sectionHeaderTopPadding, 默认会给每一个 sectionHeader 增加一个高度

解决办法:

swift代码
    if #available(iOS 15.0, *) {
        tableView.sectionHeaderTopPadding = 0
    }
Objective-C代码
    if (@available(iOS 15.0, *)) { 
        tableView.sectionHeaderTopPadding = 0;
    }

b).初始化 UITableView用UITableViewStylePlain样式,默认不显示灰色,上滑置顶时最上面的sectionHeader才有颜色。

解决办法:在viewForHeaderInSection代理方法返回自带灰色的section header

2.3.2、a)设置 tableHeaderView 后,底部会增加一段高度 (需验证)

解决方案:在设置tableHeaderView时同时设置一个高度为0.01的tableFooterView即可:

tableView?.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 0.01))

b)storyboard里的tableView,适配屏幕尺寸改tableHeaderView高度,调layoutIfNeeded不生效,只高度改了,布局没改。

DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
if let headerView = self.tableView?.tableHeaderView, let lastSubView = headerView.subviews.last {
if #available(iOS 15.0, *) {
headerView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: lastSubView.frame.origin.y + lastSubView.frame.size.height)
self.tableView?.tableHeaderView = headerView
 } else {
self.tableView?.tableHeaderView?.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: lastSubView.frame.origin.y + lastSubView.frame.size.height)
self.tableView?.tableHeaderView?.layoutIfNeeded()
        }
    }
}

2.4、UILabel

2.4.1、 NSBaselineOffsetAttributeName属性的值导致虽然约束没有问题但label内的文字位置不对

(这个问题在我们项目里有遇到的)

现在是以控件最上面的线为基准的偏移。所以用到这个属性的可以检查下。

2.4.2、NSMutableParagraphStyle的lineSpacing属性失效 解决办法加上换行符 \b或\n等

Xcode12打的包在iOS15显示无效,而Xcode13打的包在iOS15有效

if (@available(iOS 15,*)) {

            NSAttributedString *placeholderChractor = [[NSAttributedString alloc] initWithString:@"\b"];

            [as insertAttributedString:placeholderChractor atIndex:0];

        }

        [as addAttributes:@{NSParagraphStyleAttributeName: style} range:NSMakeRange(0, as.length)];

(这个问题在我们项目里有遇到的)

2.4.3、增加高度解决

iOS15计算的正好显示完Label文字高度,在IOS15显示不全,增加高度可解决。设置adjustsFontSizeToFitWidth为true时,高度不能与设置的font一样大,增加高度即可。(应该是Beta的问题 目前看正式版已修复)

2.5、检查用到的第三方库

如:第三方播放器框架ZFPlayer横屏出现问题,没有正确渲染布局,且无法切回竖屏页面
有几率闪退。第三方BRPickerView文字选择器内容布局错误。Facebook的跨平台框架React中的fishhook闪退。

解决办法:修改源码或看作者有没有适配

修改fishhook.c源码,参考https://github.com/facebook/fishhook/issues/85 中的XuweiQT的方案,将链接中的fishhook.c替换项目中fishhook.c文件

2.6、H5在WKWebView的显示问题

部分链接在iOS15的WKWebView、微信、QQ、Safari中出现空白页about:blank

(应该是Beta的原因,目前正式版没有遇到)

以上iOS15正式版有的适配问题,除NSMutableParagraphStyle的lineSpacing属性失效问题,和标记为Beta的外,其他用Xcode12编译打的包在IOS15设备使用不出现,而用Xcode13编译会出现问题

参考以下文章,感谢👍

【1】https://www.jianshu.com/p/10c7921e6d76

【2】https://www.jianshu.com/p/79ecec07d8d5

延伸:关于iOS新特性这里不多说了,可看以下这几篇比较详细。

iOS15系统如期而至,谈谈iPhone X手机适配性的使用感受 - 哔哩哔哩

苹果 iOS 15 正式版上线!我们整理了 20+个实用功能教你使用_腾讯新闻

iOS 15 体验全攻略:实测 iOS 15 后,我们总结了这 20+ 新变化

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值