iOS13适配(部分问题,持续更新)

用作记录这次更新遇到的一些坑。目前有以下,持续更新:
蓝牙隐私权限
modal样式:modalPresentationStyle
(13.1.2上已修复)UIGestureRecognizer的delaysTouchesBegan与touchesBegan:
UITextField的UIKeyboardWillChangeFrameNotification通知
暂时不适配DarkMode的问题
关于UTI的一个小问题
待更新......


1. 蓝牙隐私权限

原本公司的app是请求了蓝牙权限Privacy - Bluetooth Peripheral Usage Description的,后来更新的时候也看到有这方面的问题但是没多想,结果就崩了。
解决:添加Privacy - Bluetooth Always Usage Description,而且老的还不能删貌似,否则iOS13以下的又不能用了。

2. modalPresentationStyle

其他分享里肯定也有说到这个,默认modal样式改了,需要手动设置对应的style,不过我发现了有两种说法:

// 说法一
self.modalPresentationStyle = UIModalPresentationOverFullScreen
// 说法二
self.modalPresentationStyle = UIModalPresentationFullScreen

目前知道的区别是选用UIModalPresentationOverFullScreen会导致dismiss以后前一个controller的viewWillAppear:不走。其他区别未深究。
解决:present控制器的时候添加x.modalPresentationStyle = UIModalPresentationFullScreen

3. (13.1.2上已修复)UIGestureRecognizer的delaysTouchesBegan与touchesBegan:

我有个view上同时添加了UITapGestureRecognizer和重写了touchesBegan:系列方法,之前为了防止tap的began与touchesBegan产生可能的冲突,我对手势的delaysTouchesBegan属性赋值了YES。在13之前没问题,但是在更新了13的设备上,总是先识别tap手势,只有在tap识别失败的时候才会调用touchesBegan:系列方法(虽然看苹果解释本来就是这样的,但是以前不会感觉有什么问题,而这次实测我手指触摸view手指都快抬起来了才走了touchesBegan),这样导致操作的时候看上去页面像卡住了一样。
我做了一些测试:

在iOS13上不注释delaysTouchesBegan:
a. 单次点击(期望是tap),tap被识别,触摸不被触发。
b. 触摸view,会先等tap手势识别失败,然后触发touches系列回调,等待手势失败的时间很长
在iOS13上注释delaysTouchesBegan:
a. 单次点击(期望是tap),会执行touchesBegan:touchesCancelled:和tap手势,并且触摸的began和tap同时执行,触摸的cancelled在began执行完后立即执行。
b. 触摸view,也是两种同时识别,touches正常执行,tap也如预期的失败
在iOS12上不注释delaysTouchesBegan:
a. 单次点击(期望是tap),如期。
b. 触摸view,跟上面的iOS13上的区别是等待时间很短

所以现在苹果也说一定要处理touchesCancelled:,原本我只期望在tap手势里执行的一些操作,现在由于touchesBegan-Cancelled也会走一遍,这个在我这里导致了一些问题,所以cancelled里要处理。

解决:我注释掉了delaysTouchesBegan,改在touchesCancelled:里处理操作。这个属性慎用,感觉苹果偷偷把时间延长了。

// tapGesture.delaysTouchesBegan = YES;
4. UITextField的UIKeyboardWillChangeFrameNotification通知

我有个页面有多个textField,在它们之间切换输入的时候,会多次收到UIKeyboardWillChangeFrameNotification,而13之前没这个问题,这个可能会导致布局上的问题。
连接手机调试的时候,在多个textField输入框之间快速来回点击,会出现CPU飙到95+的情况,观察到后面的banner都不滚动了,Time Profile里给出的信息:

屏幕快照 2019-09-24 14.48.47.png
但是单独手机打开app不会有这么明显的卡住的情况。

解决:关注一下键盘弹出收回操作时视图布局可能出现的问题。

5. 暂时不适配DarkMode的问题
  • 原本app里的某些文字颜色是自定义的一种深色,结果在设置了深色模式的设备上直接看不到了(应该是很浅的颜色?跟白色背景混一起了)。
  • 状态栏手动设置UIStatusBarStyleDefault的地方颜色会与期望的不一致
    解决:最好的解决办法当然是适配DarkMode了。对于暂时不适配的,我在info.plist里设置了User Interface Style = Light,然后在需要设置状态栏的地方分情况判断。
6. 关于UTI的一个小问题

app有自定义一个文件格式,原本conform topublic.content,在iOS13之前都没问题,在iOS13的设备上,从第三方app打开我这个自定义格式的文件,居然找不到我的app了,我怀疑是不是我原本对于public.content有哪里理解错了。
解决:自定义文件类型改成comforms topublic.data,现在看来没问题。

你可能感兴趣的:(iOS13适配(部分问题,持续更新))