美文网首页iOS 的那些事儿iOS 开发之旅ios
iOS13开发中可能会出现的present viewcontro

iOS13开发中可能会出现的present viewcontro

作者: 白鹭上晴天 | 来源:发表于2019-06-06 15:11 被阅读0次

iOS13可能会出现的问题

在刚刚更新的Xcode 10.15beta和iOS13 beta版本运行应用程序调用present方法的时候可能会出现如下情况 WechatIMG2.jpeg

这个问题让我找了很多技术博客,无论是苹果的开发文档还是国外的技术论坛,我都没有找到合适的解决方案(或许是我更新的太积极了😂),但是通过很多次的尝试,发现在低版本里面不会发生这种情况(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部分

我们进入UIKitUIViewController.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];
这样就可以正常显示全屏效果了 WechatIMG1.jpeg

如有偏差欢迎指正

相关文章

网友评论

    本文标题:iOS13开发中可能会出现的present viewcontro

    本文链接:https://www.haomeiwen.com/subject/djcuxctx.html