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 = .whitetabBar.standardAppearance = appearanceif #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编译会出现问题
参考以下文章,感谢
iOS15新特性、iOS15适配相关推荐
- Android 13 新特性及适配指南
Android 13(API 33)于 2022年8月15日 正式发布(发布时间较往年早了一些),正式版Release源代码也于当日被推送到AOSP Android开源项目. 截止到笔者撰写这篇文章时 ...
- iOS 11新特性与适配
iOS 11新特性与适配 1. UIView变化 1.1. 更加方便的RTL边距设置 1.2. 安全区域 2. UIViewController变化 2.1. 废除API 2.1.1. `automa ...
- iOS9的新特性以及适配方案
1. 限制HTTP协议,全部改用更安全的HTTPS iOS9让所有的HTTP默认使用了HTTPS,原来的HTTP协议传输都改成TLS1.2协议进行传输.直接造成的情况就是App发请求的时候弹出网络无法 ...
- Android8.0、9.0、10.0、11.0的新特性兼容适配代码修改
<Android Studio开发实战 从零基础到App上线(第2版)>在书后面的附录中给出了Android8和Android9的主要特性说明,附录表格如下图所示: 不过附录表格只涵盖了常 ...
- [IOS]IOS10新特性以及适配点(转)
iOS 10 新特性以及适配点 SiriKit 所有第三方应用都可以用Siri,支持音频.视频.消息发送接收.搜索照片.预订行程.管理锻炼等 Proactive Suggestions 系统预先建议 ...
- Android12 新特性及适配指南
Android 12(API 31)于2021年10月4日正式发布,正式版源代码也于当日被推送到AOSP Android开源项目.截止到笔者撰写这篇文章时,国内各终端厂商的在售Android设备,已经 ...
- Android Q 存储新特性适配脑壳疼?指南来了!
码个蛋(codeegg)第 692 次推文 原文: https://mp.weixin.qq.com/s/aiDMyAfAZvaYIHuIMLAlcg 简单回顾下:Android Q 适配 之 存储新 ...
- iOS 9 的新特性
2015年9月8日,苹果宣布iOS 9操作系统的正式版在太平洋时间9月16日正式推出,北京时间9月17日凌晨1点推送. 新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放.iOS 9加入了 ...
- iOS -- iOS11新特性,如何适配iOS11
前言 这几天抽空把WWDC的Session看了一些,总结了一些iOS11新的特性,可能对我们的App有影响,需要我们进行适配.本文作为一个总结. 本文内容包括:集成了搜索的大标题栏.横向选项卡栏.Ma ...
- android屏幕适配的五种方式_讲一讲Android 9.0系统的新特性,对刘海屏设备进行适配...
黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!作者丨郭霖来源丨郭霖(guolin_blog) 其实Android 9 ...
最新文章
- [微信小程序]计算自己手机到指定位置的距离
- WPF学习拾遗(二)TextBlock换行
- Java动态excel模板
- 通过Zookeeper动态感知服务器上下线[案例]
- 大象狂奔,地表最强大的投行高盛摩根转型
- 350店铺装修激活码发放 免费领取店铺装修模板
- 1110 Complete Binary Tree (25 分)【难度: 一般 / 知识点: 判断完全二叉树】
- 移动web app开发必备 - 异步队列 Deferred
- SSHF备忘之依赖包(struts2+spring2.5+hibernate+freemarker)
- 传递子类 java_Java,将主类传递给子类,错误的编码风格?
- 机器学习中回归问题的性能衡量指标
- ElasticSearch多字段查询best_fieldsmost_fields
- pwm控制舵机转动角度程序_舵机的内部结构及工作原理
- 基于DWM1000的UWB测距调试(二)
- 二级计算机中一级标题设置,如何编辑目录中一级标题二级标题的不同格式
- 信息检索与利用(第三版)第一章
- 网页截图怎么截一整张_如何对整个网页页面进行截图
- 域名系统(Domain Name System,DNS)
- 从零开始修炼电脑维修秘籍
- 简单的程序诠释C++ STL算法系列之八:mismatch
热门文章
- 达观数据荣获认知图谱产业建设“创新突破奖”,并与图谱知名专家共同探讨工业知识图谱应用落地
- 今天给大家分享下收集的一些文案:日常文案系列合集,收藏备用
- hihoCoder1378:网络流二·最大流最小割定理
- WiFi覆盖下的生活 享受便利的同时 别忘记了安全
- cad断点快捷键_CAD打断(BREAK)命令的使用技巧
- 服务器win7无限重启,win7系统无限重启的解决方法
- BZOJ 1189: [HNOI2007]紧急疏散evacuate|网络流|二分答案
- python输入一个包含若干自然数的列表_Python练习题
- SQL Transformation
- java实现微信定时发送消息