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.
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.
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.