0%

Xcode11的坑

公司近来要全线切换到Xcode11进行开发和发布,做适配时碰到一些坑,在此进行记录。
前期的一些问题可参考前一篇iOS13适配的文章:iOS13 UI & 功能适配

UINavigationController

使用[UINavigationController initWithRootViewController:]初始化UINavigationController发现不再调用到initWithNibName方法,现有的逻辑会在initWithNibName进行一些变量的初始化,因为会造成界面白屏。。。
因此使用以下方式进行初始化

1
2
3
4
5
6
7
+ (instancetype)alloc {
VSNavigationController *obj = [super alloc];
if(nil != obj) {
obj.xxx = xxx;
}
return obj;
}

UIStatusBarStyle

[UIApplication sharedApplication].statusBarStyle的默认值是UIStatusBarStyleDefault,调试发现default貌似是根据用户当前dark mode状态自动切换的,开启dark是UIStatusBarStyleLightContent,关闭则是UIStatusBarStyleDarkContent(iOS13新增)。因此在Info.plist写死UIUserInterfaceStyle为Light(强制APP内关闭Dark),系统设置开启dark后,状态栏会跟APP底色混在一齐导致看不到,因此提供公共的方法设置statusBarStyle并做特殊处理,代码如下:

1
2
3
4
5
6
7
8
9
+ (void)setStatusBarStyle:(UIStatusBarStyle)sytle {
if (@available(iOS 13.0, *)) {
if (sytle == UIStatusBarStyleDefault) {
sytle = UIStatusBarStyleDarkContent;
}
}

[UIApplication sharedApplication].statusBarStyle = sytle;
}

更详细的介绍可参考:https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW14

UIModalPresentationAutomatic

.modalPresentationStyle在iOS13前默认是UIModalPresentationFullScreen,iOS13后变成UIModalPresentationAutomatic,导致弹出效果变成卡片式,顶部出现灰边。

leftView & rightView

设置给UITextField的leftView和rightView会自动sizeToFit一次导致设置给视图的Frame失效,处理办法是通过嵌套一层UIView来解决,类似如下代码:

1
2
3
4
5
6
7
8
9
UIView *leftView = ({
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"xxx"]];
imageView.left = 12;
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, imageView.width + 18, imageView.height)];
[view addSubview:imageView];
view;
});
textField.leftView = leftView;
textField.leftViewMode = UITextFieldViewModeAlways;
  • 本文作者: 陈辉鸿
  • 本文链接: https://tomee.shop/xcode11/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!