Не удается разместить UISplitViewController внутри UITabBarController

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

Ответ №2:

вы можете видеть из раскадровки,

Apple, похоже, не согласна

111