我正在迁移使用NIB来使用手动视图创建(loadView
)和自动布局的旧代码。根视图控制器是容器VC (带有2个子项),它使用自动布局并以模态方式呈现视图控制器,该视图控制器的布局在NIB中指定,并且尚未使用自动布局。在presentViewController:animated:completion:
之后一切都很好,但是当通过委托调用以dismissViewControllerAnimated:completion:
关闭模态视图时,呈现视图处于一个奇怪的,不可用的状态,其中内容奇怪地移位并且不会对触摸作出反应
我尝试创建最小的测试用例来重现问题,但我没能重现这个问题。
导致这种情况的原因是什么?
答案 0 :(得分:8)
我在我的根translatesAutoresizingMaskIntoConstraints = NO;
上设置了UIView
。
它似乎是最外面的" UIView
- 视图层次结构根目录的超级视图必须使用默认的translatesAutoresizingMaskIntoConstraints = YES
。
一旦我删除了它,一切都按预期工作。
答案 1 :(得分:2)
升级到IOS 11时遇到了这个问题.UICollectionView布局不再显示单元格了。通过添加以下行修复:
controller.modalPresentationStyle = UIModalPresentationOverFullScreen;
[self presentViewController:controller animated:YES completion:nil];
不确定为什么这会修复它但不给它一个演示风格真的与展示控制器底层布局混淆。
答案 2 :(得分:0)
我也有同样的问题,当我尝试这个导航控制器时,它工作正常,但没有现在的viewcontroller。使用下面的视图控制器方法以及translatesAutoresizingMaskIntoConstraints来解决此问题。
-(void) viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
self.view.translatesAutoresizingMaskIntoConstraints = NO;
}
现在请告诉我你对它有任何担忧。感谢
答案 3 :(得分:0)
一个不同的解决方案 - 我发现如果从容器视图中的视图控制器(而不是子视图)呈现,如果将segue从Modal切换到Show,您的约束将在初始视图中保持不变但仍然是动画好像你提出了modally并且仍然可以正确地调用dismissViewController。