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?
I had problems with this when upgrading to IOS 11. The UICollectionView layout was not showing the cells anymore. Fixed by adding the line:
Not sure why this fixes it but not giving it a presentation style really messes with the presenting controllers underlying layout.
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.
Please let me now it you have any concern about it. Thanks
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.
I was setting
translatesAutoresizingMaskIntoConstraints = NO;
on my rootUIView
. It appears the "outermost"UIView
— the superview at the root of your view hierarchy must use the defaulttranslatesAutoresizingMaskIntoConstraints = YES
. Once I've removed this, everything worked as expected.