iOS 13 正式发布,来看看有哪些 API 变动
iOS 13 已正式发布,网上对其用户体验上的新特性的描述也很多。对于开发来说,需要关注的另一方面是新系统在 API 层面做了哪些改动,从而会对我们现有的代码产生什么影响。
在这里,我们基于 iOS 13 Release Notes 做了一些整理,主要是列表出 Apple 提供的一些新的 API 和弃用了哪些 API,一起来看看
General
• iOS 13 不再支持 UIApplicationExitsOnSuspend。需要更新应用以处理现代多任务处理。
UIKit
• 当单元格突出显示或选中时,UITableViewCell 类不再更改 contentView 及其任何子视图的 backgroundColor 或 opaque 属性。如果要在 contentView 内部(包括)内容的任何子视图上设置不透明的 backgroundColor,则单元格突出显示或选中时的外观可能会受到影响。解决子视图任何问题的最简单方法是确保将 backgroundColor 设置为 nil 或 clearColor,并且设置它们的 opaque 属性为 false。但是,如果需要,您可以重写 setHighlighted:animated: 和 setSelected:animated: 方法,以便在移动到突出显示的状态和选定状态时手动更改子视图上的这些属性。
• 从iOS 8开始,将 UISearchController 与 UINavigationController 一起使用需要将顶视图控制器的 definesPresentationContext 属性设置为 true。如果不这样做会导致难以检测和调试的细微错误。从 iOS & iPadOS 13 beta 开始,如果视图控制器的 navigationItem 具有 non-nil 搜索控件,当视图控制器显示在导航控制器中时,UINavigationController 会自动将该视图控制器的 definesPresentationContext 属性设置为 true。如果您要定位早期版本的 iOS,请在搜索控制器变为活动状态之前设置此属性。
• UIRefreshControl 类不再直接修改其滚动视图的 contentInset。 相反,它对内容插入的调整将合并到滚动视图的 adjustContentInset 中。 唯一的例外是当滚动视图的 contentInsetAdjustmentBehavior 设置为 UIScrollViewContentInsetAdjustmentNever 时,在这种情况下,UIRefreshControl 实例将像以前的版本一样直接修改 contentInset。
• 如果通过覆盖 sizeThatFits 在 UITableView 中实现自调整单元格而不使用自动布局,则返回的高度将被解释为单元格的 contentView 所需的高度,UITableViewCell 会自动添加为单元格留出空间所需的任何其他高度 分隔器。如果以这种方式实现手动自调整大小,则在 UITableViewCell 上调用 sizeThatFits: 时,单元格的 contentView 宽度可以保证准确,以便在手动布局计算中使用。
• Trait环境(例如视图和视图控制器)现在在初始化期间使用 traits 填充 traitCollection 属性。这些初始特征表示特征环境在添加到层次结构时将接收的最终特征的预测。因为在初始化期间填充的特征只是一个预测,它们可能与实际在层次结构中接收的特征不同。因此,在可能的情况下,您应该等待执行使用 traitCollection 的工作,直到视图或视图控制器的视图移动到层次结构中 - 意味着窗口返回非零值 - 这样您就不必丢弃任何工作,如果实际特征不同,则使用预测的特征完成。使用 traitCollection 的最佳时间是在布局期间,例如 layoutSubviews,viewWillLayoutSubviews 或 viewDidLayoutSubviews 内部。
• 只有当特征值发生变化时,才会调用 traitCollectionDidChange: 方法。重要的是,由于特征集合现在初始化为目标层次结构中最终特征的预测,当初始预测特征与层次结构中的最终特征匹配时,特征环境添加到层次结构时将不会调用 traitCollectionDidChange:。因为 traitCollectionDidChange: 旨在作为无效回调来通知您一个或多个特征已更改,请审核此方法的现有实现,以及 UIContentContainer 方法willTransitionToTraitCollection:withTransitionCoordinator:,用于您可能依赖它的地方触发初始设置。懒惰地执行使用 traitCollection 的工作的最佳位置是在上面讨论的 layoutSubviews 方法之一,但请记住,这些布局方法在任何时候布局都会被调用,所以一定要避免在不需要时重复工作。
• 您现在可以启用调试日志记录,以便在您自己的类上调用 traitCollectionDidChange: 或willTransitionToTraitCollection:withTransitionCoordinator: 时。使用以下启动参数打开日志记录:-UITraitCollectionChangeLoggingEnabled YES。您可能希望在使用此启动参数并从 Xcode 运行应用程序时暂时禁用主线程检查程序,以避免为不相关的类添加额外的日志消息。
• UITableViewCell 类的 contentView 属性始终与前面和后面的相邻附件进行边对边布局。这简化了布局代码,因此想要正确的默认偏移的开发人员不再需要将其内容与内容视图边框或布局边距对齐,具体取决于尾部是否有附件。您现在应该始终在单元格内容视图的布局边距上布置代码以获取默认的系统插入。这些插入将根据单元格中可见的附件自动调整,以匹配系统的默认间距。
• 您现在可以从创建 block 调用自定义初始化程序,该创建块通过 instantiateInitialViewController(creator:) 或 instantiateViewController(identifier:creator:) 传递。这使您可以使用其他上下文和参数初始化视图控制器,同时利用通过 Interface Builder 在故事板中定义它们。自定义控制器初始化程序必须调用其 super.init(coder:) 方法并传递它通过创建块接收的编码器参数。
网络
• 为了增强安全性,当服务器发送 Content-Type:application/octet-stream 时,NSURLSession 不再嗅探 MIME 类型。
• NSURLRequestReloadRevalidatingCacheData 和 NSURLRequestReloadIgnoringLocalAndRemoteCacheData API现已可用。
• 从 iOS 13 beta 4 开始,强制执行 NSMutableURLRequest 的 HTTPBodyStream 属性的 copy 操作。如果在调用属性设置器后对 body 数据进行了修改,则 HTTP 请求中发送的数据将不包含该更变。调用该属性的 getter 不再返回 NSMutableData 引用,即使使用该类型的数据调用 setter 也是如此。从 iOS 13 beta 5 开始,使用 iOS 12 SDK 或以前的 SDK 构建的应用程序使用旧版行为。
• CNCopyCurrentNetworkInfo API 返回的信息已无法反映真实情况。有关更多详细信息,请参阅更新的API文档和标题。
• 包含 body 的 GET HTTP 方法的所有 NSURLSessionTask 实例现在都会抛出错误 NSURLErrorDataLengthExceedsMaximum。
• 删除了对代理自动配置(PAC)的 FTP 和文件URL方案的支持。HTTP 和 HTTPS 是 PAC 唯一支持的 URL 方案。这会影响所有 PAC 配置,包括但不限于使用“设置”,“系统偏好设置”,“配置文件”和 NSURLSession API(如connectionProxyDictionary 和CFNetworkExecuteProxyAutoConfigurationURL)设置的配置。
• NSURLSession 和 NSURLConnection API 不再支持 SPDY。服务器应使用 HTTP 2 或 HTTP 1.1。
音频
• 现在可以在 AVAudioEngine 上启用语音处理模式。
• 新的 AVAudioNode 类型可用于包装用户定义的 block,以实时发送或接收数据。
• 基于 AVAudioEngine 的应用程序可以使用一种新方法来检索附加到 AVAudioEngine 实例的所有节点的列表。
• AVAudioEnvironmentNode 中的新渲染模式基于输出设备自动选择最佳空间音频渲染算法。
• 一个新的 AVAudioSession 属性允许在会话主动使用音频输入时播放系统声音和触觉。
• 新的枚举 AVAudioSessionPromptStyle 根据系统中的其他音频活动通知应用程序应该播放哪种语音提示。
• AVAudioSessionRouteSharingPolicy 现在允许应用指定路由共享策略,以便其音频和视频路由到与 AirPlay 相同的位置。
• Audio Unit Extensions 现在支持所有宿主应用程序中可用的用户预设。
• OpenAL框架已弃用,出于兼容性目的暂时保留。过渡到 AVAudioEngine 以获得 3D 音频功能。
• AUGraph 已被弃用,转而支持 AVAudioEngine。
• 不推荐使用应用间音频。使用 Audio Units 支持此功能。
• 不推荐使用基于 Carbon 的 Audio Units,在将来的版本中不再支持。
• 不再支持旧版 Core Audio HAL 音频硬件插件。将音频服务器插件用于支持音频驱动程序。
音频共享
• 音频共享与 AirPods(第1代或更高版本)和 PowerBeats Pro 兼容。需要 iPhone 8 或更高版本。
AVFoundation
• AVFoundation 现在支持使用 HEVC 和 Alpha 通道编码视频。以这种方式编码的视频在 AVFoundation API 和网页中的 Safari 中得到广泛支持。格式的技术细节可以在互操作性配置文件规范中找到。
Core Image
• filterWithImageURL:options: 和 filterWithImageData:options: 不再支持 RAW 5 及更早版本。 版本 6 及更高版本仍然受支持。
• 添加了用于实例化和修改内置 Core Image 过滤器的新 API。
• 增强了 CICoreMLModel 过滤器以支持具有 MLFeatureTypeMultiArray 类型的输入或输出的模型。
• Metal CIKernel 实例支持具有任意结构化数据的参数。
• Metal CIKernel 实例支持返回一组2×2像素。
• CIFormat 符号的整数值(例如 kCIFormatARGB8)已更改为跨平台一致性的新值集合。以前的值仍然支持向后兼容; 但是,您应该避免对特定数值的依赖性。
Mail
• 现在可以在“设置”>“邮件”中启用“忽略已阻止的发件人”。被阻止的联系人列表与 Messages,FaceTime 和 Phone 共享。
iOS 13 正式发布,来看看有哪些 API 变动的更多相关文章
- iOS - 适配 iOS 13 之工兵连扫雷
iOS 13 支持适配的机型 目前最新 iPhone 11.iPhone 11 Pro和iPhone 11 Pro Max iPhone X.iPhone XR.iPhone XS.iPhone XS ...
- iOS 13 绕过锁屏密码漏洞
iOS 13 很快就要发布了,在未正式发布之前,西班牙的安全研究员 Jose Rodriguez 公开了一个漏洞,能够查绕过锁屏密码查看通讯录.照片.短信. 在 iOS 设备上,当屏幕锁定时,用户无法 ...
- Kubernetes 1.13 正式发布,功能亮点一览!
Kubernetes 1.13 正式发布,功能亮点一览! Kubernetes 1.13 正式GA,这是2018年发布的第四次也是最后一次大版本,1.13也是迄今为止发行最快的版本,仅用10周时间 ...
- [其它]iOS 13 正式版发布 iPhone 6s或更新型号均可升级
苹果今天(2019.09.20)发布了 iOS 13 正式版,可以升级的设备包括 iPhone 6s 或更新型号.第七代 iPod Touch. iOS 13 推出深色模式,为 iPhone 带来截然 ...
- iOS 13 presentViewController
升级了iOS 13,发现代码中使用presentViewController的都变成了这样的,顶部留了一部分 查看present样式,iOS 13 默认自动适配,需要在present的时候,设置sty ...
- Xcode 11新建工程.--iOS 13 SceneDelegate适配
收录文章::::::::::::::: iOS 13 适配要点总结 在Xcode 11 创建的工程,运行设备选择 iOS 13.0 以下的设备,运行应用时会出现黑屏现象.原因: Xcode 11 默认 ...
- iOS 13 DeviceToken获取发生变化
问题描述: iOS 13 通过[deviceToken description]获取到的内容已经变了,这段代码运行在 iOS 13 上已经无法获取到准确的DeviceToken字符串了, NSStri ...
- iOS 13适配
1. 安装时,加入Xcode11.3 后 原xcode会安装开发工具插件时候出现 点击安装插件之后会出现 目前没找到解决方案.只能在一个mac电脑上安装使用一个版本. 2.编译时,会出现libstdc ...
- ios 13 陀螺仪DeviceOrientationEvent需要申请用户权限
有些代码跑着跑着就报错了,有些陀螺仪用着用着就不能用了. 目前时间是2020.4.4,发现 ios 13系统调用陀螺仪 需要申请用户权限(这应该是个趋势,后面安卓应该陆续跟进).具体实现来看下: 1 ...
随机推荐
- 域名、主机名、网站名以及 URL 基础概念
这个东西,在百度经验上已经有人讲得非常清楚了, 作为 web 方向的小白, 我写下我的理解,以便日后查看. 以 https:// www.3vjia.com 为例, 见下图: DNS (Domain ...
- Python模块之requests,urllib和re
目录 一.爬虫的步骤 二.使用Jupyter 三.爬虫请求模块之urllib 四.爬虫请求模块之requests 五.爬虫分析之re模块 一.爬虫的步骤 1.发起请求,模拟浏览器发送一个http请求 ...
- net core Webapi基础工程搭建(七)——小试AOP及常规测试_Part 1
目录 前言 拦截器 异常拦截器 测试结果 身份验证拦截器 测试 小结 补充 2019-07-31 前言 一天天不知道怎么过的,但确实挺忙,事赶事不带停那种,让我感觉跟在流水线干活一样,忙活的事差不多了 ...
- git 常规业务场景 使用
一般每个开发者都会有个自己的分支,有个test分支,合并代码用,两条分支相互备份,就算merge的时候被覆盖,也不用担心 建立自己的分支 // 创建本地分支, git checkout -b dev_ ...
- yolo v2
https://blog.csdn.net/wfei101/article/details/79398563 https://blog.csdn.net/oppo62258801/article/de ...
- 解决ionic 上拉加载组件 ion-infinite-scroll自动调用多次的问题
ionic 中一个上拉刷新的组件 ion-infinite-scroll,如果页面未填充满页面高度,会自动检测并无限调用多次加载更多的函数:当然,主要会导致首次调用的时候,会执行几次加载更多的函数: ...
- unity_实用小技巧(避免游戏对象被销毁时声音消失)
在游戏中我们使用碰撞检测,当两个物体发生碰撞时产生声音音效,代码如下: 如果使用上述代码,我们会发现,在脚本中使用AudioSource声明该声音,当该物体被销毁时声音也会立刻停止. 但是我们希望声音 ...
- unity之shader
渲染流程分为三个阶段:应用阶段,几何阶段,光栅化阶段. Unity Shader的分类: 使用的是ShaderLab编写unity中的的shader 1 表面着色器 Surface Shader 2 ...
- hdfs运行机制
hdfs:分布式文件系统 hdfs有着文件系统共同的特征: 1.有目录结构,顶层目录是: / 2.系统中存放的就是文件 3.系统可以提供对文件的:创建.删除.修改.查看.移动等功能 hdfs跟普通的 ...
- Mac下搭建go和beego开发环境
go安装 首先到golang的官网下载 直接双击安装包,安装 ,下一步,下一步....完成既可 验证安装是否成功 打开终端执行 输出 go version go1.11.5 darwin/amd64 ...