专门记录所有遇到的 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