调用dismissViewControllerAnimated:completion后视图无法使用

7
我正在将使用NIB的旧代码迁移到使用手动创建视图(loadView)和自动布局。根视图控制器是一个带有2个子视图的容器VC,它使用自动布局并以模态方式呈现一个视图控制器,该视图控制器在NIB中指定其布局,并且尚未使用自动布局。在presentViewController:animated:completion:之后一切正常,但是当通过委托调用dismissViewControllerAnimated:completion:关闭模态视图时,呈现视图会处于奇怪的、无法使用的状态,其中内容会被奇怪地移位,而且不会对触摸做出反应。

我尝试创建最小的测试用例来复现问题,但我未能成功复现该问题。

可能是什么原因导致了这种情况?


https://dev59.com/C2Mm5IYBdhLWcg3wX-HT 似乎描述了相同的问题。 - Palimondo
4个回答

9
我在根UIView上设置了translatesAutoresizingMaskIntoConstraints = NO;。看起来“最外层”的UIView - 即视图层次结构中根视图的父视图必须使用默认的translatesAutoresizingMaskIntoConstraints = YES。一旦我移除了这个设置,一切都按预期工作了。

你是否发现,即使将子视图控制器添加到父视图控制器的视图层次结构中后,这仍适用于子视图控制器的根视图? - bilobatum
嗨。我在这里发布了一个相关问题,附带有样例项目和问题:http://stackoverflow.com/questions/40428075/segue-from-a-slpagingviewswift-vc-and-dismiss-the-destination-vc-to-return 我找不到如何在我的上下文(SLPagingView)中实现我找到的解决方案。如果有人能看一下并提供帮助,我将非常感激,谢谢! - Eyal Ben Yehuda

3

当我升级到IOS 11时,我遇到了这个问题。UICollectionView布局不再显示单元格。通过添加以下代码解决:

controller.modalPresentationStyle = UIModalPresentationOverFullScreen;
[self presentViewController:controller animated:YES completion:nil];

不确定为什么这样做可以解决问题,但是不给它一个演示样式确实会影响呈现控制器的基本布局。

0

我也遇到了同样的问题,当我尝试使用导航控制器时,它可以正常工作,但是在当前视图控制器中却不行。使用下面的视图控制器方法以及translatesAutoresizingMaskIntoConstraints来解决这个问题。

-(void) viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    self.view.translatesAutoresizingMaskIntoConstraints = NO;
}

如果您对此有任何疑虑,请告知我。谢谢。


0
一种不同的解决方案 - 我发现如果在容器视图中从视图控制器进行呈现(而不是子视图),如果您将segue从Modal切换到Show,则您的初始视图上的约束将保持不变,但仍会像模态呈现一样进行动画,并且仍然能够正确调用dismissViewController。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接