IOS15.0的适配

环境
XCode13.0
IOS 15.0
在 升级xcode 13.0 之后,正式开始支持 iOS15,就需要做适配 iOS15了,在 xcode 13.0 之前的就不会有什么影响的

UINavigationBar

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

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

解决方法

主要是以下两个属性 (UINavigationController 的属性)

// 静止样式
self.navigationBar.standardAppearance;
// 滚动样式
self.navigationBar.scrollEdgeAppearance;
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 }
    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;}

AppDelegate

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-200, 0) forBarMetrics:UIBarMetricsDefault];// iOS 15适配if (@available(iOS 13.0, *)) {UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];[appearance setBackgroundColor:[UIColor whiteColor]];// UINavigationBarAppearance 会覆盖原有的导航栏设置,这里需要重新设置返回按钮隐藏,不隐藏可注释或删掉appearance.backButtonAppearance.normal.titlePositionAdjustment = UIOffsetMake(-200, 0);[[UINavigationBar appearance] setScrollEdgeAppearance: appearance];[[UINavigationBar appearance] setStandardAppearance:appearance];}

UITabbar

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

 if #available(iOS 13.0, *) { let appearance = UITabBarAppearance()// 背景色appearance.backgroundColor = .whitetabBar.standardAppearance = appearanceif #available(iOS 15.0, *) {tabBar.scrollEdgeAppearance = appearance}}
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;}}

TableView

iOS 15 的 UITableView 新增了一条新属性:sectionHeaderTopPadding, 默认会给每一个 section header 增加一个高度,当我们使用 UITableViewStylePlain 初始化 UITableView 的时候,能发现 sectionHeader 增高了 22px。

/// Padding above each section header. The default value is `UITableViewAutomaticDimension`.@available(iOS 15.0, *)open var sectionHeaderTopPadding: CGFloat//iOS 15中tableView会给每一个section的顶部(header以上)再加上一个22像素的高度,形成一个section和section之间的间距
//为了配合以前的开发习惯,我们只需要在创建实例的时候进行对间距的设置即可if #available(iOS 15.0, *) {tableView.sectionHeaderTopPadding = 0}//或者全局设置if #available(iOS 15.0, *) { UITableView.appearance().sectionHeaderTopPadding = 0}
//为了配合以前的开发习惯,我们只需要在创建实例的时候进行对间距的设置即可if (@available(iOS 15.0, *)) { tableView.sectionHeaderTopPadding = 0;}//或者全局设置 if (@available(iOS 15.0, *)) {[UITableView appearance].sectionHeaderTopPadding = 0;}

IOS15.0的适配相关推荐

  1. 消费者版 Vive Trackers 正式发布,只会与 Steam 1.0 基站适配

    (52VR.com翻译) HTC Vive 17日起开始向消费者群体提供 Vive Trackers 跟踪器了!除了跟踪器主体,配件套装和来自软件开发者的相关支持在12月中上旬也会到来. 备受期待的配 ...

  2. 华为升级harmonyos的机型名单,华为鸿蒙 OS 2.0 系统适配名单已出,四月推送,天玑机型暂时无缘...

    原标题:华为鸿蒙 OS 2.0 系统适配名单已出,四月推送,天玑机型暂时无缘 华为官方在 2020 年发布了旗下自研系统"HarmonyOS 2.0"版本,发布会现场展示了 Har ...

  3. 基于Android6.0~9.0的适配

    前言 大家还记得Android 6.0权限适配的泪水吗?而现在谷歌已经出了Android P的稳定版,而且谷歌粑粑,为了大家能给辛苦熬夜加班,特地的和个大市场合作,要强制推出9.0的适配,而近期在下不 ...

  4. Android6.0权限适配及兼容库的实现

    从6.0 MarshMallow开始,Android支持动态权限管理,即有些权限需要在使用到的时候动态申请,根据用户的选择需要有不同的处理,具体表现可以看下图: 本文并不关心权限适配的原理,原理可以参 ...

  5. android 6.0 短信权限,Android6.0权限适配

    Code4Android .jpg 前言 现在谈论Android权限适配可能有点没必要,因为网上关于权限适配的文章很多,搜一下Android6.0权限适配关键词能搜到一堆文章,而且很多写的还很不错.不 ...

  6. ios15.0.1正式版耗电吗 ios15.0.1正式版值得升级吗

    最近,ios15.0.1正式更新了,而很多用户关心的是 ios15.0.1正式版的耗电情况,那么,ios15.0.1正式版耗电吗? ios15.0.1正式版值得升级吗?下面就一起来看看吧. ios15 ...

  7. Android7.0的适配

    关于Android7.0的适配   最近在软件的维护和更新过程中,了解到一些关于Android7.0的适配,在这里和大家分享一下,据我所知,需要对Notification.拍照.图片的裁剪进行适配 一 ...

  8. IOS真机调试包 iOS15.0

    最新 iOS 真机调试包15.0 最近一不小心升级IOS15.0,我滴个乖乖! 由于xcode还是用的12.0,也不算太旧,就不想升级(因为升级xcode14要12.4G,然后还需要更新mac系统,当 ...

  9. mate10 android 版本,Mate 10/Mate 10 Pro(含保时捷设计)P 版本 (安卓9.0)适配公告...

    本帖最后由 DP手机产品经理 于 2019-3-22 17:51 编辑 Hi,亲爱的花粉们,感谢您的耐心等待~ EMUI 一直致力于给用户提供最佳的使用体验,为早日让大家搭乘上安卓 9.0 的快车,攻 ...

最新文章

  1. 小冰完成数亿元Pre-A轮融资,投资方为北极光创投和网易,还宣布了和老东家微软的战略合作...
  2. MATLAB 中怎么求图像在水平方向和垂直方向的像素和,用图表示
  3. linux 复制包括子目录_【Linux分享】Linux常用命令+教程分享
  4. String,char,数组,列表 相互转化 (更新中)
  5. target存放的是编译后的.class文件地方 默认情况下不会讲非class文件放入进入 如果要使用非.class文件 需要通过增加配置方式自动加入文件...
  6. 每日一题(50)—— 各类型与零值的比较
  7. hdu-4080 Stammering Aliens 字符串hash 模板题
  8. 敏捷开发一千零一问系列之三:序言及解决问题的心法(共振)
  9. 做底层 AI 框架和做上层 AI 应用,哪个对自己的学术水平(或综合能力)促进更大?...
  10. pythonqueue线程_python基于queue和threading实现多线程下载实例
  11. java中lastmodified_Java File lastModified()方法
  12. linux ps1 日期格式,Linux下bash的PS1
  13. 通过Excel对各个商品的销售分析
  14. 客流分析江湖争端再起,新旧势力谁更胜一筹?...
  15. 一览各类无人飞机设计方法
  16. PG 锁类型、级别、死锁解决
  17. 城市文化笔记整理(二)
  18. 最新 955 不加班的公司名单(2022版)
  19. 数据仓库面试题-初级
  20. WSO2 Business Process Server(WSO2 BPS)使用简易教程

热门文章

  1. php composer 安装,composer安装的方法步骤(图文)
  2. html文字斜体变成正体,$$中的字母如何由斜体变成正体?
  3. 单片机8×8点阵显示简单汉字的程序_LED显示屏的显示原理原来是这样,科技实现梦想...
  4. mysql base64 图片php_php实现图片以base64显示的方法
  5. java怎么设置快速修复键_Java开发环境之------MyEclipse快捷键和排除错误第一选择ctrl+1(***重点***:ctrl+1,快速修复---有点像vs中的快速using...
  6. 转行,转向哪里?电子工程师!!!
  7. linux mysql 最小安装,Linux最小化安装之安装mysql
  8. oracle一体机高水位,oracle 移动高水位:
  9. P4390 [BOI2007]Mokia 摩基亚 (CDQ解决三维偏序问题)
  10. Splash 基础使用 JavaScript渲染 爬虫