iOS开发:关于iOS13适配的那些事

前言

iOS13出来有一段时间了,之前一直也没有适配。最近公司要开发新的项目,要去要适配最新的系统和功能,所以就翻看文档,把自己遇到的问题和解决的方法罗列出来,供大家参考。

1:新增管理项目声明周期的文件SceneDelegate

Xcode11.0以上的开发工具创建的项目中,都包含SceneDelegate.h/.m文件,进去一看,里面包含的是项目的生命周期的方法和声明一个属性:@property (strong, nonatomic) UIWindow * window。然后进到AppDelegate文件中发现里面的没有了生命周期的方法和UIWindow属性的声明。

根据苹果文档的说明,iOS13.0以上的系统,声明周期的方法和UIWindow属性的声明被移入到SceneDelegate文件中统一管理。如果大家目前不想使用SceneDelegate文件管理声明周期,可以按照下面方法删除即可:

在Info.plist文件中,删除 Application Scene Manifest

iOS开发:关于iOS13适配的那些事_第1张图片
删除 Application Scene Manifest

然后在AppDelegate文件中,补全声明周期的方法和声明UIWindow属性即可。


2:UITextField的placeholder私有属性被废弃

在iOS13.0的情况下运行项目,UITextField突然报了这个错:找不到对应的key _placeholderLabel.textColor.

报错提示

查看了苹果的资料得知,iOS13.0以后,苹果禁止UITextField使用的私有属性修改占位符的颜色及其文字大小,可以使用attributedPlaceholder富文本属性修改。

已iOS13.0系统为分界面,加判断区分一下即可:

iOS开发:关于iOS13适配的那些事_第2张图片
解决方案


3:导航控制器模态弹出时,控制器界面不能完全铺满整个屏幕

先看一下iOS13.0系统下模态弹出的三种情况

iOS开发:关于iOS13适配的那些事_第3张图片
iOS13.0系统下模态弹出的三种情况

其中,左边图片是iOS13.0系统下,默认弹出的样式,后面俩种情况,根据需要,做了修改。

模态弹出一共有一下几种情况:

iOS开发:关于iOS13适配的那些事_第4张图片
模态弹出的枚举

iOS13.0及其以后,增加一个枚举:UIModalPresentationAutomatic,官方解释如下:

 Defines the presentation style that will be used for this view controller when it is presented modally. Set this property on the view controller to be presented, not the presenter.

 If this property has been set to UIModalPresentationAutomatic, reading it will always return a concrete presentation style. By default UIViewController resolves UIModalPresentationAutomatic to UIModalPresentationPageSheet, but system-provided subclasses may resolve UIModalPresentationAutomatic to other concrete presentation styles. Participation in the resolution of UIModalPresentationAutomatic is reserved for system-provided view controllers.

 Defaults to UIModalPresentationAutomatic on iOS starting in iOS 13.0, and UIModalPresentationFullScreen on previous versions. Defaults to UIModalPresentationFullScreen on all other platforms.

定义以模态显示时将用于此视图控制器的显示样式。在要显示的视图控制器(而不是演示者)上设置此属性。

 如果将此属性设置为UIModalPresentationAutomatic,则读取该属性将始终返回具体的呈现样式。默认情况下,UIViewController将UIModalPresentationAutomatic解析为UIModalPresentationPageSheet,但是系统提供的子类可以将UIModalPresentationAutomatic解析为其他具体的呈现样式。保留UIModalPresentationAutomatic的分辨率供系统提供的视图控制器使用。

 从iOS 13.0开始,在iOS上默认为UIModalPresentationAutomatic,在以前的版本上默认为UIModalPresentationFullScreen。在所有其他平台上,默认为UIModalPresentationFullScreen。

在iOS13.0系统下,模态弹出如图片上左边所示,猛地感觉很不适应,不是所需要的,笔者稍作修改,可以实现需求。现罗列出来,供大家参考:

iOS开发:关于iOS13适配的那些事_第5张图片
模态弹出的代码实现


未完待续

你可能感兴趣的:(iOS开发:关于iOS13适配的那些事)