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 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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With