class PresentedBaseClass : UIView{
override init(frame: CGRect){
super.init(frame: frame)
setupSubviews()
}
func setupSubviews(){
self.translatesAutoresizingMaskIntoConstraints = false // This is the problematic line
// ... some code to create subviews
setupConstraints()
}
func setupConstraints(){
NSLayoutConstraint.activate([
// Adding the two lines of code below will correct the problem, although
// it is probably better to remove the problematic line
//self.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.width)
//self.heightAnchor.constraint(equalToConstant: UIScreen.main.bounds.height)
// ... constraints on subviews
])
}
}
class PresentedSubClass1 : PresentedBaseClass{
// ...
}
class PresentedSubClass2 : PresentedBaseClass{
// ...
}
class PresentingClass : UIView{
var windowFrame: CGRect
init(windowframe: CGRect){
windowFrame = windowframe
super.init(nibName: nil, bundle: nil)
}
@objc func originalPresentation(_ sender: UIButton){
childVC = PresentedSubClass1Controller(windowframe: windowFrame)
present(childVC!, animated: false, completion: nil)
// The two lines below are the original workaround
//let appDelegate = UIApplication.shared.delegate
//appDelegate?.window??.rootViewController = childVC
}
@objc func gotoSubClass1(){
childVC?.dismiss(animated: false, completion: nil)
childVC = PresentedSubClass1Controller(windowframe: windowFrame)
present(childVC!, animated: false, completion: nil)
//let appDelegate = UIApplication.shared.delegate
//appDelegate?.window??.rootViewController = childVC
}
@objc func gotoSubClass2(){
childVC?.dismiss(animated: false, completion: nil)
childVC = PresentedSubClass2Controller(windowframe: windowFrame)
present(childVC!, animated: false, completion: nil)
//let appDelegate = UIApplication.shared.delegate
//appDelegate?.window??.rootViewController = childVC
}
}
class AppDelegate: UIResponder, UIApplicationDelegate{
var window: UIWindow?
var PresentingController: PresentingController!
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.main.bounds)
PresentingController = PresentingController(windowframe: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
window?.rootViewController = PresentingController
window?.makeKeyAndVisible()
return true
}
}Apparently, the problem was that the presented view was not properly constrained; its subviews were, but it wasn't. See code above.
Post
Replies
Boosts
Views
Activity
I actually get better behavior on iOS 12 if I change the rootViewController to the presented (vs presenting) view controller. What you say might be true on iOS 13, which could be why this workaround doesn't work there.
The automatic modalPresentationStyle is an iOS 13 thing. I get a compilation error if I try to set the modalPresentationStyle to automatic on iOS 12, thus it can not be the source of the issue I am experiencing on iOS 12. Thanks for your reply though.