iOS13可能会出现的问题
在刚刚更新的Xcode 10.15beta和iOS13 beta版本运行应用程序调用present方法的时候可能会出现如下情况这个问题让我找了很多技术博客,无论是苹果的开发文档还是国外的技术论坛,我都没有找到合适的解决方案(或许是我更新的太积极了😂),但是通过很多次的尝试,发现在低版本里面不会发生这种情况(iOS12及以下),于是我查阅了最新的开发文档,发现了端倪,主要还是因为我们之前忽略了UIViewController
里面的一个属性,即:modalPresentationStyle
,下面我会通过swift和oc两种方法进行讲解
Swift部分
在iOS13之前我们所使用的
func present(_ : UIViewController, animated: Bool, completion: (() -> Void)?)
这个方法中如果没有定义UIModalPresentationStyle
这个枚举类型的话,系统会默认给fullScreen
,但是在iOS13中如果不定义的话,系统默认的是
@available(iOS 13.0, *)
case automatic
会出现pageSheet
这个效果,所以为了适配iOS13的话,每次的present方法建议提前设置好UIModalPresentationStyle
let mainViewController = UIView() // 即需要被present的view
mainViewController.modalPresentationStyle = .fullScreen
self.present(mainViewController, animated: true, completion: nil)
Objective-C部分
我们进入UIKit
的UIViewController.h
中,可以看到定义了个一个
@property(nonatomic,assign) UIModalPresentationStyle modalPresentationStyle API_AVAILABLE(ios(3.2));
属性,同样的,我们进行追踪可以发现UIModalPresentationStyle
是一个枚举NS_ENUM
类型的,我们所需要的全凭推入的方法就对应 0 这个选项即UIModalPresentationFullScreen
所以如果需要还原之前的效果的话,只需做以下操作
UIViewController *vc1 = [[UIViewController alloc] init]; // vc1即需要被present的viewcontroller
vc1.modalPresentationStyle = 0;
[self presentViewController:vc animated:YES completion:nil];
这样就可以正常显示全屏效果了如有偏差欢迎指正