View unusable after dismissViewControllerAnimated:

2019-02-14 02:55发布

I'm migrating older code that used NIBs to use manual view creation (loadView) and Auto Layout. The root view controller is a container VC (with 2 children) that uses auto layout and modally presents a view controller that has its layout specified in a NIB and does not yet use auto layout. All is fine after presentViewController:animated:completion:, but when the modal view is closed with dismissViewControllerAnimated:completion: via delegate call, the presenting view is left in a strange, unusable state where the content is weirdly shifted and does not react to touch.

I have tried to create minimal test case to reproduce the problem, but I've failed to reproduce the issue.

What could be causing this?

4条回答
老娘就宠你
2楼-- · 2019-02-14 03:28

I had problems with this when upgrading to IOS 11. The UICollectionView layout was not showing the cells anymore. Fixed by adding the line:

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

Not sure why this fixes it but not giving it a presentation style really messes with the presenting controllers underlying layout.

查看更多
smile是对你的礼貌
3楼-- · 2019-02-14 03:28

I have also the same problem and when i tried this navigation controller it was working fine but not with present viewcontroller. Use this below view controller method along with translatesAutoresizingMaskIntoConstraints to solve this problem.

-(void) viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    self.view.translatesAutoresizingMaskIntoConstraints = NO;
}

Please let me now it you have any concern about it. Thanks

查看更多
神经病院院长
4楼-- · 2019-02-14 03:35

A different solution - I found if presenting from a view controller within a container view (as opposed to a subview), if you switch the segue from Modal to Show, your constraints will stay the same on your initial view but still animate as if you presented modally and still be able to call dismissViewController correctly.

查看更多
The star\"
5楼-- · 2019-02-14 03:38

I was setting translatesAutoresizingMaskIntoConstraints = NO; on my root UIView. It appears the "outermost" UIView — the superview at the root of your view hierarchy must use the default translatesAutoresizingMaskIntoConstraints = YES. Once I've removed this, everything worked as expected.

查看更多
登录 后发表回答