美文网首页
iOS13适配(部分问题,持续更新)

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

作者: 幂琪有天 | 来源:发表于2019-09-29 09:20 被阅读0次

    用作记录这次更新遇到的一些坑。目前有以下,持续更新:
    蓝牙隐私权限
    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适配(部分问题,持续更新)

          本文链接:https://www.haomeiwen.com/subject/ijovuctx.html