#swift #uikit #uisplitviewcontroller
Вопрос:
Я прочитал все другие ответы на этот вопрос, и все они кажутся очень старыми и, похоже, не работают.
Я пытаюсь создать приложение с UITabBar, и на одной из этих вкладок должен быть UISplitViewController.
Настройка довольно проста:
let redViewController = UIViewController()
redViewController.view.backgroundColor = .red
let blueViewController = UIViewController()
blueViewController.view.backgroundColor = .blue
let splitViewController = UISplitViewController(style: .doubleColumn)
splitViewController.setViewController(redViewController, for: .primary)
splitViewController.setViewController(blueViewController, for: .secondary)
let tabBarController = UITabBarController()
tabBarController.setViewControllers([splitViewController], animated: false)
window?.rootViewController = tabBarController
Чего я ожидаю
Что я получаю
Ответ №1:
UISplitViewController
в iOS 14 произошли некоторые изменения с введением макетов в стиле столбцов. Контроллеры разделенного вида в стиле столбцов не могут быть встроены в контроллеры панели вкладок, но могут быть в классическом стиле. Вы создаете контроллер с разделенным видом в классическом стиле, используя любой инициализатор, кроме init(style:)
.
Например:
let red: UIViewController = ...
let blue: UIViewController = ...
// Note that the pre-iOS 14 initialiser is being used
let splitViewController = UISplitViewController(nibName: nil, bundle: nil)
splitViewController.viewControllers = [red, blue]
splitViewController.tabBarItem = UITabBarItem(tabBarSystemItem: .bookmarks, tag: 0)
let tabBarController = UITabBarController(nibName: nil, bundle: nil)
tabBarController.viewControllers = [splitViewController]
Обратите внимание, что вы не можете использовать какой-либо из новых API, представленных в iOS 14, с разделенными представлениями в классическом стиле (например, макет с тремя столбцами, поведение разделения). Если вы хотите использовать этот новый API, вам придется использовать боковую панель вместо панели вкладок.
Я сообщил об этой проблеме в Помощнике по обратной связи, но, по-видимому, она работает так, как задумывалось. Я предполагаю, что это способ Apple отдавать предпочтение навигации на боковой панели над навигацией на панели вкладок в приложениях для iPad.