1. 更新了Xcode11.0之后,在iOS13.0中presentViewController
和之前弹出的样式不一样。
//恢复到之前样式的解决方案:(设置VC.modalPresentationStyle)
viewcontroller *vc = [[viewcontroller alloc]init];
vc.modalPresentationStyle = UIModalPresentationFullScreen;
[weakSelf presentViewController:webView animated:YES completion:nil];
由于项目中,很多地方用了 presentViewController, 如果按上面的方法,要修改好多地方,于是...
采用分类的形式,给 UIViewController 增加一个分类,写入方法
//Objective-C, 直接写在 .m 中
@implementation UIViewController (iOS13)
- (UIModalPresentationStyle)modalPresentationStyle{
return UIModalPresentationFullScreen;
}
@end
OK ,运行起来 和之前一样
2. 友盟崩溃问题
解决方案:更新最新的友盟SDK
3. 13.0暗黑模式来袭,
- 如何先屏蔽13.0的暗黑模式
//解决方案:info文件中加入
<key>UIUserInterfaceStyle</key>
<string>Light</string>
-
iOS 13 推出暗黑模式,UIKit 提供新的系统颜色和 api 来适配不同颜色模式,xcassets 对素材适配也做了调整,官方具体适配可见: Implementing Dark Mode on iOS。
https://mp.weixin.qq.com/s/qliFbqRdkkE30vslojfJCA
https://juejin.im/post/5cf6276be51d455a68490b26
4. 增加了蓝牙一直使用的权限请求
//解决方案:在info.plist里增加
<key>NSBluetoothAlwaysUsageDescription</key>
<string>我们想要一直使用您的蓝牙功能来使定位更准确</string>
5. UITextField的私有KVC- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath 会导致崩溃问题(其他的控件KVC可能也会导致崩溃问题,目前还未发现,请谨慎使用)
//例如[_PhonetextField setValue:self.placeholdersColor forKeyPath:@"_placeholderLabel.textColor"];
//解决方案:NSMutableAttributedString *placeholderString = [[NSMutableAttributedString alloc] initWithString:placeholder attributes:@{NSForegroundColorAttributeName : self.placeholderColor}]; _textField.attributedPlaceholder = placeholderString;
6. iOS 13.0获取deviceToken方法更改
//之前的获取方式:
[[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""]
stringByReplacingOccurrencesOfString: @">" withString: @""]
stringByReplacingOccurrencesOfString: @" " withString: @""]
//13.0后的获取方式:
if (![deviceToken isKindOfClass:[NSData class]]) return;
const unsigned *tokenBytes = [deviceToken bytes];
NSString *deviceTokens = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
NSLog(@"deviceTokens:_______________%@",deviceTokens);
7. iOS 13.0暗黑模式运行后发现状态栏变为白色,设置[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault不起作用
//解决方案:首先可能是 info.plist
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
//将false换成true可以设置全局为黑色,但是如果部分界面需要用到白色的状态栏颜色,不能设置全局黑色,那么在最新的iOS13.0新增了状态栏颜色属性UIStatusBarStyleDarkContent
//在需要设置成黑色的控制器中加入iOS 13.0的判断
-(void)viewWillAppear:(BOOL)animated{
if (@available(iOS 13.0, *)) {
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDarkContent;
} else {
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}
}
8. 在最新的iOS13.0后苹果强制加入了 Sign in with Apple(苹果登录),如果您的app中包含了其他的三方登录,那么这个苹果登录也需要加进去。
Sign in with Apple接入流程:https://www.jianshu.com/p/e1284bd8c72a
9. iOS 13.0以后,苹果停止了对UIWebview的维护,将全面替换成WKWebview,app审核时会出现警告,但是可以继续使用,听说有的人因为UIWebView的问题审核被拒了,这个还有待更新。
h5的适配,参考链接:
https://blog.csdn.net/u012413955/article/details/92198556
10. iOS13.0,Xcode11 项目中使用SJVideoPlayer三方播放器的发生崩溃问题,
解决方案:替换三方库里面的一个.m文件
点击SJAVMediaMainPresenter.m.zip下载。(问题及解决方案在下面的链接里面)
https://github.com/changsanjiang/SJVideoPlayer/issues/153#issuecomment-534364750
11. UISegmentedControl 默认样式改变
默认样式变为白底黑字,如果设置修改过颜色的话,页面需要修改。
原本设置选中颜色的 tintColor 已经失效,新增了 selectedSegmentTintColor 属性用以修改选中的颜色。
12. Xcode 11 创建的工程在低版本设备上运行黑屏
使用 Xcode 11 创建的工程,运行设备选择 iOS 13.0 以下的设备,运行应用时会出现黑屏。这是因为 Xcode 11 默认是会创建通过 UIScene 管理多个 UIWindow 的应用,工程中除了 AppDelegate 外会多一个 SceneDelegate.
这是为了 iPadOS 的多进程准备的,也就是说 UIWindow 不再是 UIApplication 中管理。但是旧版本根本没有 UIScene,因此解决方案就是在 AppDelegate 的头文件加上:
@property (strong, nonatomic) UIWindow *window;
13. NSAttributedString优化
对于UILabel、UITextField、UITextView,在设置NSAttributedString时也要考虑适配Dark Mode,否则在切换模式时会与背景色融合,造成不好的体验
不建议的做法
NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:16]};
NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"富文本文案" attributes:dic];
推荐的做法
// 添加一个NSForegroundColorAttributeName属性
NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:16],NSForegroundColorAttributeName:[UIColor labelColor]};
NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"富文本文案" attributes:dic];
有其他的问题将持续更新!
[参考]
https://www.cnblogs.com/FZP5/p/11671241.html
https://www.jianshu.com/p/8183d086b931