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 变动的更多相关文章

  1. iOS - 适配 iOS 13 之工兵连扫雷

    iOS 13 支持适配的机型 目前最新 iPhone 11.iPhone 11 Pro和iPhone 11 Pro Max iPhone X.iPhone XR.iPhone XS.iPhone XS ...

  2. iOS 13 绕过锁屏密码漏洞

    iOS 13 很快就要发布了,在未正式发布之前,西班牙的安全研究员 Jose Rodriguez 公开了一个漏洞,能够查绕过锁屏密码查看通讯录.照片.短信. 在 iOS 设备上,当屏幕锁定时,用户无法 ...

  3. Kubernetes 1.13 正式发布,功能亮点一览!

    Kubernetes 1.13 正式发布,功能亮点一览!   Kubernetes 1.13 正式GA,这是2018年发布的第四次也是最后一次大版本,1.13也是迄今为止发行最快的版本,仅用10周时间 ...

  4. [其它]iOS 13 正式版发布 iPhone 6s或更新型号均可升级

    苹果今天(2019.09.20)发布了 iOS 13 正式版,可以升级的设备包括 iPhone 6s 或更新型号.第七代 iPod Touch. iOS 13 推出深色模式,为 iPhone 带来截然 ...

  5. iOS 13 presentViewController

    升级了iOS 13,发现代码中使用presentViewController的都变成了这样的,顶部留了一部分 查看present样式,iOS 13 默认自动适配,需要在present的时候,设置sty ...

  6. Xcode 11新建工程.--iOS 13 SceneDelegate适配

    收录文章::::::::::::::: iOS 13 适配要点总结 在Xcode 11 创建的工程,运行设备选择 iOS 13.0 以下的设备,运行应用时会出现黑屏现象.原因: Xcode 11 默认 ...

  7. iOS 13 DeviceToken获取发生变化

    问题描述: iOS 13 通过[deviceToken description]获取到的内容已经变了,这段代码运行在 iOS 13 上已经无法获取到准确的DeviceToken字符串了, NSStri ...

  8. iOS 13适配

    1. 安装时,加入Xcode11.3 后 原xcode会安装开发工具插件时候出现 点击安装插件之后会出现 目前没找到解决方案.只能在一个mac电脑上安装使用一个版本. 2.编译时,会出现libstdc ...

  9. ios 13 陀螺仪DeviceOrientationEvent需要申请用户权限

    有些代码跑着跑着就报错了,有些陀螺仪用着用着就不能用了. 目前时间是2020.4.4,发现  ios 13系统调用陀螺仪 需要申请用户权限(这应该是个趋势,后面安卓应该陆续跟进).具体实现来看下: 1 ...

随机推荐

  1. 获取n月后的当前时间

    例如用户计算会员的到期日期时间 public static Date getMonthNextOrBeforeDate(int monthNum) { Date dNow = new Date(); ...

  2. 入门MySQL——查询语法练习

    前言: 前面几篇文章为大家介绍了DML以及DDL语句的使用方法,本篇文章将主要讲述常用的查询语法.其实MySQL官网给出了多个示例数据库供大家实用查询,下面我们以最常用的员工示例数据库为准,详细介绍各 ...

  3. Element-UI 表单验证规则rules 配置参数说明

    官方文档 : https://github.com/yiminghe/async-validator

  4. Redis之对象篇——Redis对象系统简介

    Redis之对象篇--Redis对象系统简介 前言     之前几篇文章,简单介绍 Redis用到的所有主要数据结构,简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合.跳跃表. 图解Red ...

  5. Appium+python自动化(三十四)- 有图有真相,很美很精彩 - 屏幕截图和Android APP类型简介(超详解)

    简介 在实际自动化项目运行过程中,很多时候App可以会出现各种异常,为了更好的定位问题,除了捕捉日志我们还需要对运行时的设备状态来进行截屏.从而达到一种“有图有真相”的效果. 截图方法 方法1 sav ...

  6. 记录一则DG遭遇ORA-00088的案例

    测试环境:RHEL 5.4 + Oracle 11.2.0.3 DG 现象:起初是在使用DG Broker进行switchover切换测试时,报错ORA-16775,提示有可能有数据丢失,不允许swi ...

  7. silverlight中递归构造无限级树treeview+checkbox

    两个实体,其实一个实体也能构造出来,我这里是为了增加一个 checkbox //第一个实体 public class person { public int no { get; set; } publ ...

  8. Windows10下载mysql详解

    mysql版本分为企业版(Enterprise)和社区版(Community),其中社区办是通过GPL协议授权的开源软件,可以免费使用,而企业版是需要收费的商业软件. mysql官网 https:// ...

  9. JVM内存结构与垃圾回收总结

    1.JVM内存模型 JVM只不过是运行在你系统上的另一个进程而已,这一切的魔法始于一个java命令.正如任何一个操作系统进程那样,JVM也需要内存来完成它的运行时操作.记住:JVM本身是硬件的一层软件 ...

  10. python 3.7.4下载与安装的问题

    发病时间:2019 年 8 月12 日 周一 1.操作系统环境: Win10 64位 2.pyhon版本3.7.4 python官网地址:www.python.org 本机下载的文件名为:python ...