iOS 13 UISplitView Problems
I had the same issue.
After a bit of investigation it seems like viewDidLoad
is too late to set it to all visible.
I subclassed the UISplitViewController
and changed the setting in awakeFromNib
method. Now it is working as expected.
Alxlives's answer helped me. By using the debugger, I notice that in the master view controller, viewDidLoad is not called. So the delegate is never set, thus the collapse method is never called.
I fixed this by setting the delegate in awakeFromNib():
override func awakeFromNib() {
self.splitViewController?.delegate = self
}
Now the splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool
is called, and if you return true, the master will be displayed.
Warren Milward's answer helped me to guide me in the right direction, but actually I got it working with viewDidLoad()
.
I ended up using a subclass for the UISplitViewController
and set the required values in viewDidLoad()
as well as the delegate calls here.
class CustomSplitViewController: UISplitViewController, UISplitViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.preferredDisplayMode = .allVisible
}
func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
return true
}
}