兼容iOS 10 资料整理笔记。iOS10XCode8适配各种问题(相对其他的较完美)

1.Notification(通知)

自从Notification为引入之后,苹果就是不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS
10初始确实的进行大改重构,这叫开发者也体会至UserNotifications的易用,功能也转移得老大有力。

  • iOS 9 以前的通报

    1.当调用方法时,有些计吃人口好不便分,容易写错方法,这叫开发者有时候很郁闷。

    2.行使在运转时与莫运行时捕获通知的不二法门还未一致。

    3.以在前台时,是无法直接展示远程通知,还索要进一步处理。

    4.曾经出的通报是匪可知创新的,内容产生时凡无能够转的,并且只有大概文本展示方式,扩展性根本未是蛮好。

  • iOS 10 开始之通

    1.有所相关通知给联合到了UserNotifications.framework框架中。

    2.日增了撤销、更新、中途还足以改通知之情节。

    3.通无以是大概的公文了,可以入视频、图片,自定义通知的亮等等。

    4.iOS
    10相对之前的关照来说尤其好用易于管理,并且展开了常见优化,对于开发者来说是同一宗好事。

    5.iOS
    10起于权力问题展开了优化,申请权限就比较简单了(本地和长途通知并以一个办法被)。

  • iOS 10 通知上有关材料:

[UserNotifications:

本文转载自简书,存粹为了分享与造福下次使用,作者和链接以文章下着发生描绘,如果作者禁止转载请告诉自己以便及时去Q:1076860592

苹果官方文档](https://link.jianshu.com?t=https%3A%2F%2Fdeveloper.apple.com%2Freference%2Fusernotifications)

1.Notification(通知)

自从Notification深受引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS
10起真的的开展大改重构,这让开发者也体会至UserNotifications的易用,功能为转移得特别强劲。

  • iOS 9 以前的打招呼

    1.当调用方法时,有些措施吃丁很为难分,容易写错方法,这为开发者有时候很抑郁。

    2.动在运作时同免运行时捕获通知的路还无同等。

    3.用到在前台时,是无力回天直接展示远程通知,还亟需更进一步处理。

    4.曾来的通知是匪能够更新的,内容来时是无可知改变的,并且只有简单文本展示方式,扩展性根本不是雅好。

  • iOS 10 开始之打招呼

    1.具有有关通知被合并到了UserNotifications.framework框架中。

    2.充实了取消、更新、中途还足以修改通知之始末。

    3.通知非在凡略的文书了,可以在视频、图片,自定义通知的显示等等。

    4.iOS
    10针锋相对之前的通告来说更是好用易于管理,并且进行了大规模优化,对于开发者来说是千篇一律项好事。

    5.iOS
    10初始于权力问题开展了优化,申请权限就比较简单了(本地与长途通知并以一个方吃)。

  • iOS 10 通知上有关材料:

    [UserNotifications:

    苹果官方文档](https://developer.apple.com/reference/usernotifications)

    苹果官方看来频1 –
    苹果官方看来频2 –
    苹果官方视频3
    活久见的重构 – iOS 10 UserNotifications
    框架解析
    WWDC2016 Session笔记 – iOS 10
    推送Notification新特性

苹果官方看来频1

2.ATS的问题

iOS
9中默认HTTP的大网是未推荐以的,当然我们也得以将NSAllowsArbitraryLoads设置为YES禁用ATS。不过iOS
10由2017年1月1日自从苹果不允我们由此之艺术跳了ATS,也就是说强制我们因而HTTPS,如果无这样的话提交App可能会见给拒。但是咱可以通过NSExceptionDomains来针对特定的域名开放HTTP好好通过核查。

参照学习文章如下:
关于 iOS 10 中 ATS 的问题

苹果官方看来频2

苹果官方视频3
活久见的重构 – iOS 10 UserNotifications
框架解析
WWDC2016 Session笔记 – iOS 10
推送Notification新特性

3.iOS 10 隐私权限设置

iOS 10
开始针对隐私权限更加严厉,如果您不装就见面直接倒,现在多相遇崩溃问题了,一般解决办法都是以info.plist文件添加对应的KeyValue就是可了。

图片 1

以上Value值,圈出的红线部分的字是显得让用户看之,需要好加上规范的提示说明,不能够也空。目前解决办法基本都无异,参考学习文章如下:
兼容iOS
10:配置获取隐私数据权限声明

2.ATS的问题

iOS
9中默认HTTP的大网是不推荐使用的,当然我们吧得将NSAllowsArbitraryLoads设置为YES禁用ATS。不过iOS
10起2017年1月1日打苹果不允我们由此这个点子跳了ATS,也就是说强制我们为此HTTPS,如果无这样的话提交App可能会见受拒绝。但是咱得经NSExceptionDomains来针对特定的域名开放HTTP足好通过核对。

参照学习文章如下:
关于 iOS 10 中 ATS
的问题

4.Xcode 8 运行一积没因此底logs解决办法

图片 2

上图我们看来,自己新建的一个工啥也不曾提到就打印一堆烂七八糟的事物,我道这理应是Xcode 8的问题,具体为尚未仔细研究,解决办法是装OS_ACTIVITY_MODE : disable如下图:

图片 3

系题材接二连三:
stackoverflow问答

3.iOS 10 隐私权限设置

iOS 10
开始针对隐私权限更加严峻,如果您切莫装就会直接倒,现在众遇见崩溃问题了,一般解决办法都是当info.plist文件添加对应之KeyValue不畏得了。

以上Value价,圈有底红线部分的文是亮受用户看之,需要协调长规范的提醒说明,不可知啊空。目前解决办法基本都一样,参考学习文章如下:
兼容iOS
10:配置获取隐私数据权限声明

5.iOS 10 UIStatusBar方法过期:

图片 4

当我们出被产生或为此到UIStatusBar有性质,在iOS 10
中这些方式就过了,如果你的种类蒙有效之说话就是得得适配。上面的图纸为能够发现,如果以iOS
10遭公需要以preferredStatusBar论这样:

//iOS 10 
- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleDefault;
}

4.Xcode 8 运行一积没因此底logs解决办法

上图我们视,自己新建的一个工程啥也从来不提到就打印一堆烂七八糟的事物,我道这个理应是Xcode 8的问题,具体为远非仔细研究,解决办法是装OS_ACTIVITY_MODE : disable如下图:

相关问题接二连三:
stackoverflow问答

6.iOS 10 UICollectionView 性能优化

乘开发者对UICollectionView的深信,项目被因故之地方吧比多,但是还是有有的题材,比如偶尔会卡顿、加载慢等。所以iOS
10
UICollectionView逾的优化,因为叙述起来比较复杂耗费时间,在这边就供就学参考文章如下:
WWDC2016 Session笔记 – iOS 10
UICollectionView新特性

5.iOS 10 UIStatusBar方法过期:

当咱们开被生或因此到UIStatusBar一部分性质,在iOS 10
中这些办法就晚点了,如果你的品类中行之有效之言语就是得得适配。上面的图纸为会发现,如果当iOS
10饱受公需要运用preferredStatusBar仍这样:

//iOS 10 
- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleDefault;
}

7.iOS 10 UIColor 新增方法

以下是法定文档的征:

Most graphics frameworks throughout the system, including Core Graphics,
Core Image, Metal, and AVFoundation, have substantially improved support
for extended-range pixel formats and wide-gamut color spaces. By
extending this behavior throughout the entire graphics stack, it is
easier than ever to support devices with a wide color display. In
addition, UIKit standardizes on working in a new extended sRGB color
space, making it easy to mix sRGB colors with colors in other, wider
color gamuts without a significant performance penalty.

Here are some best practices to adopt as you start working with Wide
Color.

  • In iOS 10, the UIColor class uses the extended sRGB color space and
    its initializers no longer clamp raw component values to between 0.0
    and 1.0. If your app relies on UIKit to clamp component values
    (whether you’re creating a color or asking a color for its component
    values), you need to change your app’s behavior when you link
    against iOS 10.
  • When performing custom drawing in a UIView on an iPad Pro (9.7
    inch), the underlying drawing environment is configured with an
    extended sRGB color space.
  • If your app renders custom image objects, use the new
    UIGraphicsImageRenderer class to control whether the destination
    bitmap is created using an extended-range or standard-range format.
  • If you are performing your own image processing on wide-gamut
    devices using a lower level API, such as Core Graphics or Metal, you
    should use an extended range color space and a pixel format that
    supports 16-bit floating-point component values. When clamping of
    color values is necessary, you should do so explicitly.
  • Core Graphics, Core Image, and Metal Performance Shaders provide new
    options for easily converting colors and images between color
    spaces.

为事先我们还是为此RGB来设置颜色,反正用起为无是特别多样化,这次新增的不二法门应该就是一个弥补吧。所以当iOS
10
苹果官方建议我们采用sRGB,因为其性能再好,色彩更丰富。如果您协调为UIColor描绘了同拟分类的言语也不过尝试替换为sRGBUIColor接近中新增了零星个Api如下:

+ (UIColor *)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

- (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

6.iOS 10 UICollectionView 性能优化

乘胜开发者对UICollectionView的信任,项目被因故之地方呢比较多,但是还是有部分题材,比如偶尔会卡顿、加载慢等。所以iOS
10
UICollectionView更是的优化,因为叙述起来比较复杂耗费时间,在这边就供就学参考文章如下:
WWDC2016 Session笔记 – iOS 10
UICollectionView新特性

8.iOS 10 UITextContentType

// The textContentType property is to provide the keyboard with extra information about the semantic intent of the text document.

@property(nonatomic,copy) UITextContentType textContentType NS_AVAILABLE_IOS(10_0); // default is nil

在iOS 10
UITextField添加了textContentType枚举,指示文本输入区域所幸之语义意义。

运此属性可以被键盘和体系信息,关于用户输入的始末之料想的语义意义。例如,您可指定一个文本字段,用户填写收到一模一样封电子邮件确认uitextcontenttypeemailaddress。当你提供关于您希望用户以文书输入区域被输入的情的消息经常,系统可以以某些情况下自行选择适合的键盘,并加强键盘修正和主动跟另文件输入会的结。

7.iOS 10 UIColor 新增方法

以下是合法文档的验证:

Most graphics frameworks throughout the system, including Core Graphics,
Core Image, Metal, and AVFoundation, have substantially improved support
for extended-range pixel formats and wide-gamut color spaces. By
extending this behavior throughout the entire graphics stack, it is
easier than ever to support devices with a wide color display. In
addition, UIKit standardizes on working in a new extended sRGB color
space, making it easy to mix sRGB colors with colors in other, wider
color gamuts without a significant performance penalty.

Here are some best practices to adopt as you start working with Wide
Color.

  • In iOS 10, the UIColor class uses the extended sRGB color space and
    its initializers no longer clamp raw component values to between 0.0
    and 1.0. If your app relies on UIKit to clamp component values
    (whether you’re creating a color or asking a color for its component
    values), you need to change your app’s behavior when you link
    against iOS 10.
  • When performing custom drawing in a UIView on an iPad Pro (9.7
    inch), the underlying drawing environment is configured with an
    extended sRGB color space.
  • If your app renders custom image objects, use the new
    UIGraphicsImageRenderer class to control whether the destination
    bitmap is created using an extended-range or standard-range format.
  • If you are performing your own image processing on wide-gamut
    devices using a lower level API, such as Core Graphics or Metal, you
    should use an extended range color space and a pixel format that
    supports 16-bit floating-point component values. When clamping of
    color values is necessary, you should do so explicitly.
  • Core Graphics, Core Image, and Metal Performance Shaders provide new
    options for easily converting colors and images between color
    spaces.

为之前我们还是故RGB来装颜色,反正用起来呢不是专程多样化,这次新增的计应该就是一个弥补吧。所以当iOS
10
苹果官方建议我们使用sRGB,因为它性能更好,色彩更丰富。如果你协调吗UIColor写了平等效仿分类的讲话也只是尝试替换为sRGBUIColor接近中新增了点儿独Api如下:

+ (UIColor *)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

- (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

9.iOS 10 字体随着手机系统字体而变更

当我们手机系统字体改变了之后,那我们Applabel也会随之一块儿变,这需要我们描绘过多代码来尤其处理才贯彻,但是iOS
10
提供了如此的习性adjustsFontForContentSizeCategory来安装。因为从没真机,具体实际操作还从未失去实现,如果掌握错帮忙指正。

  UILabel *myLabel = [UILabel new];

   /*
    UIFont 的preferredFontForTextStyle: 意思是指定一个样式,并让字体大小符合用户设定的字体大小。
   */
    myLabel.font =[UIFont preferredFontForTextStyle: UIFontTextStyleHeadline];

 /*
 Indicates whether the corresponding element should automatically update its font when the device’s UIContentSizeCategory is changed.
 For this property to take effect, the element’s font must be a font vended using +preferredFontForTextStyle: or +preferredFontForTextStyle:compatibleWithTraitCollection: with a valid UIFontTextStyle.
 */
     //是否更新字体的变化
    myLabel.adjustsFontForContentSizeCategory = YES;

8.iOS 10 UITextContentType

// The textContentType property is to provide the keyboard with extra information about the semantic intent of the text document.

@property(nonatomic,copy) UITextContentType textContentType NS_AVAILABLE_IOS(10_0); // default is nil

在iOS 10
UITextField添加了textContentType枚举,指示文本输入区域所梦想之语义意义。

以此属性可以为键盘和体系信息,关于用户输入的始末之预期的语义意义。例如,您得指定一个文本字段,用户填写收到一模一样封电子邮件确认uitextcontenttypeemailaddress。当你提供关于您希望用户以文书输入区域受到输入的情的信经常,系统可以以某些情况下自行选择恰当的键盘,并增强键盘修正和主动与其他文件输入会的构成。

10.iOS 10 UIScrollView新增refreshControl

图片 5

iOS 10 以后要是继承UIScrollView那尽管支持刷新功能:

@property (nonatomic, strong, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(10_0) __TVOS_PROHIBITED;

9.iOS 10 字体随着手机系统字体而变更

当我们手机系统字体改变了后来,那我们Applabel呢会见随着一块儿变,这亟需我们形容过多代码来更处理才实现,但是iOS
10
提供了这么的习性adjustsFontForContentSizeCategory来安。因为没真机,具体实际操作还从未失去贯彻,如果知道错帮忙指正。

  UILabel *myLabel = [UILabel new];

   /*
    UIFont 的preferredFontForTextStyle: 意思是指定一个样式,并让字体大小符合用户设定的字体大小。
   */
    myLabel.font =[UIFont preferredFontForTextStyle: UIFontTextStyleHeadline];

 /*
 Indicates whether the corresponding element should automatically update its font when the device’s UIContentSizeCategory is changed.
 For this property to take effect, the element’s font must be a font vended using +preferredFontForTextStyle: or +preferredFontForTextStyle:compatibleWithTraitCollection: with a valid UIFontTextStyle.
 */
     //是否更新字体的变化
    myLabel.adjustsFontForContentSizeCategory = YES;

11.iOS 10 判断系版本是姿势

看清系版本是咱们常下的,尤其是今天大家都发生或用适配iOS
10,那么问题即使起了,如下图:

图片 6

俺们取得了答案是:

//值为 1
[[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]
//值为10.000000
[[UIDevice currentDevice] systemVersion].floatValue,
//值为10.0
[[UIDevice currentDevice] systemVersion]

故此说判断系方法极其好还是用后的片种植方式,哦~我忘记说了[[UIDevice currentDevice] systemVersion].floatValue本条方式也是不借助谱的,好像在8.3本输出的价是8.2,记不懂得了相反正是不靠谱的,所以建议大家于是[[UIDevice currentDevice] systemVersion]是法!

Swift判断如下:

  if #available(iOS 10.0, *) {
            // iOS 10.0
            print("iOS 10.0");
        } else { }

参照文章如下:
iOS 日常工作之常因此宏定义大全

10.iOS 10 UIScrollView新增refreshControl

iOS 10 以后要是后续UIScrollView那么就是支持刷新功能:

@property (nonatomic, strong, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(10_0) __TVOS_PROHIBITED;

12.Xcode 8 插件不可知用底问题

世家还提升了Xcode 8,但是对插件依赖的开发者们,一边哭着一边去网上搜寻解决办法。那么下是解决办法:
受你的 Xcode8
继续以插件

不过张文章最后的解释,我们了解如果因此插件的说话,可能安全达成会见有题目、并且付诸审核会被驳回,所以建议大家要不要为此了,解决办法总是有些,比如在Xcode中添加注释的代码块呢是不行便利的。

11.iOS 10 判断系版本是姿势

看清系版本是我们经常用的,尤其是今天大家都起或用适配iOS
10,那么问题便起了,如下图:

咱俩取得了答案是:

//值为 1
[[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]
//值为10.000000
[[UIDevice currentDevice] systemVersion].floatValue,
//值为10.0
[[UIDevice currentDevice] systemVersion]

故而说判断系方法极其好还是用后的有数种方式,哦~我忘记说了[[UIDevice currentDevice] systemVersion].floatValue斯点子也是免借助谱的,好像在8.3本输出的值是8.2,记不掌握了相反正是不靠谱的,所以建议大家之所以[[UIDevice currentDevice] systemVersion]这个方法!

Swift判断如下:

  if #available(iOS 10.0, *) {
            // iOS 10.0
            print("iOS 10.0");
        } else { }

参照文章如下:
iOS 日常工作之时因此宏定义大全

13.iOS 10开端项目被一些文字显示不全问题

我用Xcode 8Xcode 7.3个别测试了下,如下图:

图片 7

Xcode 8

图片 8

Xcode 7

创建一个Label然后给它们自从适应大小,字体大小都是17终极输出的增幅是匪平等的,我们再次拘留一下,下面的数据就亮为什么升级iOS 10
之后App蒙有文字显示不咸了:

Xcode 8打印 Xcode 7.3打印
1个文字宽度:17.5 1个文字宽度:17
2个文字宽度:35 2个文字宽度:34
3个文字宽度:52 3个文字宽度:51
4个文字宽度:69.5 4个文字宽度:68
5个文字宽度:87 5个文字宽度:85
6个文字宽度:104 6个文字宽度:102
7个文字宽度:121.5 7个文字宽度:119
8个文字宽度:139 8个文字宽度:136
9个文字宽度:156 9个文字宽度:153
10个文字宽度:173.5 10个文字宽度:170

英文字母会无见面吧发出这种题材,我而通过测试,后来发觉英文字母没有问题,只有汉字有题目。目前只有一个一个窜控件解决者问题,暂时没有其他好方法来解决。

12.Xcode 8 插件不克为此底问题

世家还升级了Xcode 8,但是对插件依赖之开发者们,一边哭着一边去网上找解决办法。那么下面是解决办法:
让你的 Xcode8
继续运用插件

可看看文章最后之解说,我们解如果因此插件的讲话,可能安全上会出问题、并且付诸审核会被驳回,所以建议大家还是不要就此了,解决办法总是有,比如当Xcode中添加注释的代码块吧是挺有利的。

14.Xcode 8以Xib awakeFromNib的警示问题

(本条更新受:2016-09-18)
Xcode 8之前我们以Xib初始化- (void)awakeFromNib {}都是如此写啊绝非什么问题,但是以Xcode 8会晤来如下警告:

图片 9

倘非爱好这警示的话,应该明了的长[super awakeFromNib];咱们来瞧官方证实:

You must call the super implementation of awakeFromNib to give parent
classes the opportunity to perform any additional initialization they
require. Although the default implementation of this method does
nothing, many UIKit classes provide non-empty implementations. You may
call the super implementation at any point during your own
awakeFromNib method.

13.iOS 10起来项目面临一些文字显示不咸问题

我用Xcode 8Xcode 7.3个别测试了下,如下图:

Xcode 8

Xcode 7

始建一个Label然后让它打适应大小,字体大小都是17末输出的升幅是勿一致的,我们还拘留一下,下面的数额就是知道干什么升级iOS 10
之后App倍受一些文字显示不全了:

Xcode 8打印 Xcode 7.3打印
1个文字宽度:17.5 1个文字宽度:17
2个文字宽度:35 2个文字宽度:34
3个文字宽度:52 3个文字宽度:51
4个文字宽度:69.5 4个文字宽度:68
5个文字宽度:87 5个文字宽度:85
6个文字宽度:104 6个文字宽度:102
7个文字宽度:121.5 7个文字宽度:119
8个文字宽度:139 8个文字宽度:136
9个文字宽度:156 9个文字宽度:153
10个文字宽度:173.5 10个文字宽度:170

英文字母会无会见也生这种问题,我以通过测试,后来发现英文字母没有问题,只有汉字有题目。目前只有一个一个修改控件解决是题材,暂时没有另外好措施来化解。

15.Xcode 8编译过慢的问题

(本条更新让:2016-09-20)
众人口都反映Xcode 8从来不事先编译快了,甚至有些人徐的辣眼睛。但是我之没感到蛮缓慢,跟之前多,我觉得同电脑当生出有关系吧,有的开发者几独月不还开电脑,电脑里运行一堆积线程,一堆没因此的废品。下面是加快Xcode编译的方式,感兴趣的可以错过押一下:
加强Xcode编译速度

文/判若两人丶(简书作者)
初稿链接:http://www.jianshu.com/p/0cc7aad638d9

点击打开链接

14.Xcode 8施用Xib awakeFromNib的警戒问题

(本条更新让:2016-09-18)
Xcode 8前我们下Xib初始化- (void)awakeFromNib {}都是这么形容啊并未什么问题,但是以Xcode 8会面出如下警告:

只要非希罕这个警示的话,应该明确的长[super awakeFromNib];咱俩来探望官方证实:

You must call the super implementation of awakeFromNib to give parent
classes the opportunity to perform any additional initialization they
require. Although the default implementation of this method does
nothing, many UIKit classes provide non-empty implementations. You may
call the super implementation at any point during your own
awakeFromNib method.

15.Xcode 8编译过慢的题目

(本条更新受:2016-09-20)
无数口且反映Xcode 8从不前编译快了,甚至有点人慢吞吞的辣眼睛。但是本人之远非发异常缓慢,跟之前多,我以为跟电脑当生出部分牵连吧,有的开发者几只月无重开电脑,电脑里运行一堆积线程,一堆积没因此之污物。下面是加速Xcode编译的点子,感兴趣之足错过押一下:
增强Xcode编译速度

16.iOS 10 ImagePickerController.cameraViewTransform问题

(本条更新让:2016-09-21)
无数总人口反映自定义相机出现了问题,cameraViewTransform勿可知为此了,其实网上有关这个的材料不是成千上万,在此处提供参考办法如下:

  • 通过监听AVCaptureSessionDidStartRunningNotification来解决

  //#import <AVFoundation/AVFoundation.h>
  //监听
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cameraNotification:) name:AVCaptureSessionDidStartRunningNotification object:nil];
  //监听方法
  - (void)cameraNotification:(NSNotification *)notification {
    dispatch_async(dispatch_get_main_queue(), ^{
          // 这里实现
          imagePickerController.cameraViewTransform = CGAffineTransformMakeTranslation(50,  50);
      });
  }
  • 使用AVFoundation框架
    看来UIImagePickerController视乎不以适用于iOS 10了。所以说可以选取AVFoundation来解决是题材。
    下面是参照学习:
    UIImagePickerController’s
    cameraViewTransform

本文就吧整治iOS 10 相关资料,也参照部分网上的稿子,还见面陆续更新任何iOS
10 相关资料,以及开发中相见的题材等等。
本文章首发地址:http://www.jianshu.com/p/0cc7aad638d9
iOS 10
苹果官方文档

相关文章