UIModalPresentationFormSheet 中的 UITextView 冻结应用程序 iOS 10

Posted

技术标签:

【中文标题】UIModalPresentationFormSheet 中的 UITextView 冻结应用程序 iOS 10【英文标题】:UITextView in UIModalPresentationFormSheet freezes app iOS 10 【发布时间】:2016-09-23 01:22:46 【问题描述】:

我在视图控制器中有一个 UITextView,我使用模态表单显示它

vc.modalPresentationStyle = UIModalPresentationFormSheet;
[AppDelegate.rootController presentViewController:vc animated:YES completion:nil];

ios 9.3 之前一切都很好。然后是 iOS 10/10.0.1

这样,每次用户在文本字段内点击以调出键盘时,应用程序都会冻结。我不知道为什么。 我尝试将 UITextView 作为第一响应者。这可以很好地启动键盘,我可以在 VC 上键入并按下按钮来采取行动。 VC 和键盘都被解雇了。但同样,如果没有按下按钮,如果我尝试简单地关闭键盘,应用程序就会冻结。

任何人的任何想法?

【问题讨论】:

你有解决这个问题的办法吗?如果我覆盖 viewWillLayoutSubviews,我将面临同样的问题。 【参考方案1】:

我将代码从 viewWillLayoutSubviews 移至 viewDidLayoutSubviews。它不再冻结。在我看来,这像是一个 iOS 10 错误。

override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()
    self.view.superview!.bounds = CGRectMake(0,0, 500, 300)

【讨论】:

这是正确的解决方案。我们意识到由于某种原因 viewWillLayout 被连续调用,从而阻塞了任何其他应用程序操作【参考方案2】:

今天早些时候正在经历类似的事情。 对我的修复如下(不确定为什么,iOS 10 中一定发生了一些变化)。

在旧代码中:

- (void)viewWillLayoutSubviews 
    self.view.superview.bounds = CGRectMake(0,self.view.superview.bounds.origin.y, 768, 256);
    [super viewWillLayoutSubviews];

删除它解决了我的问题。

【讨论】:

您的代码是解决方案吗?我尝试了下面的代码,但仍然导致冻结: // THIS FUNCTION CAUSING FREEZE override func viewWillLayoutSubviews() self.view.superview!.bounds = CGRectMake(0,0, 500, 300) super.viewWillLayoutSubviews()

以上是关于UIModalPresentationFormSheet 中的 UITextView 冻结应用程序 iOS 10的主要内容,如果未能解决你的问题,请参考以下文章