iOS 13适配记录

2,008 阅读2分钟

专门记录所有遇到的 iOS 13 适配问题以及解决步骤


iOS13 无法获取Wi-Fi(SSID)名字的问题

解决www.jianshu.com/p/352405ef7…


present出一个视图,dismiss之后所有视图丢失问题(模态弹出默认样式改变)

在 iOS 13,使用 presentViewController 方式打开视图,通过下滑返回。

这是因为苹果将 UIViewController 的 modalPresentationStyle 属性的默认值改成了新加的一个枚举值 UIModalPresentationAutomatic,对于多数 UIViewController,此值会映射成 UIModalPresentationPageSheet。

解决

present一个视图之前设置 modalPresentationStyle 属性为 UIModalPresentationFullScreen

需要注意,这种效果弹出来的页面导航栏部分是会被砍掉的,页面布局时需要注意导航栏的内容不要被遮挡。

还有一点注意的是,我们原来以全屏的样式弹出一个页面,那么将这个页面弹出的那个 ViewController 会依次调用 viewWillDisappear 和 viewDidDisappear。然后在这个页面被 dismiss 的时候,将他弹出的那个 ViewController 的 viewWillAppear 和 viewDidAppear 会被依次调用。然而使用默认的视差效果弹出页面,将他弹出的那个 ViewController 并不会调用这些方法,原先写在这四个函数中的代码以后都有可能会存在问题。


使用 NSBluetoothPeripheralUsageDescription 申请蓝牙权限崩溃

解决在 info.plist 文件中,使用 NSBluetoothAlwaysUsageDescription 代替


私有方法 KVC 可能导致崩溃

在使用 [textField setValue:[UIColor blueColor] forKeyPath:@"_placeholderLabel.textColor"] 的时候会直接崩溃

解决

// 替代方案 1,去掉下划线,访问 placeholderLabel

[textField setValue:[UIColor blueColor] forKeyPath:@"placeholderLabel.textColor"];
[textField setValue:[UIFont systemFontOfSize:20] forKeyPath:@"placeholderLabel.font"];

// 替代方案 2

textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"输入" attributes:@{  
    NSForegroundColorAttributeName: [UIColor blueColor],  
    NSFontAttributeName:   
}];

UITabBarController tabBar 中字体颜色显示不正常

有国外的开发者说是苹果的一个 Bug

解决在初始化controller的地方添加如下代码

    if (@available(iOS 10.0, *)) {
        self.tabBar.unselectedItemTintColor = [UIColor lightGrayColor];
    } else {
        // Fallback on earlier versions
    }

EZMicrophone iOS13 录音直接崩溃

项目用了一个EZAudio的框架,在升级到iOS13之后,点击录音就会直接崩溃。

解决:
添加如下代码到初始化麦克风的地方就可以

    if (@available(iOS 13.0, *)) {
        AudioStreamBasicDescription inputFormat = [EZAudioUtilities monoFloatFormatWithSampleRate:48000.0f];
        self.microPhone = [EZMicrophone microphoneWithDelegate:self withAudioStreamBasicDescription: inputFormat];
    } else {
        self.microPhone = [EZMicrophone microphoneWithDelegate:self];
    }

禁用深色模式

如果没有完整的适配深色模式,当设备处在深色模式的时候会出现大块的黑块,第一种解决方式当然是完整的根据苹果文档适配深色模式,但是如果没有时间这样做,只能先禁用掉深色模式。

解决
在项目的 info.plist 文件中添加 User Interface Style 选项,把值设为 Light