Как использовать UISplitViewController в Swift

Поэтому я добавляю UISplitViewController к проекту, который встроен в UITabBarController .

UISplitViewController имеет UINavigationController в качестве отношения «Мастер и деталь» с собственным корневым контроллером.

Мастер rootController UINavigationController rootController имеет подробный rootController управления UINavigationController .

Глянь сюда:

введите описание изображения здесь

Все довольно просто? Теперь в TableViewController я делаю следующее:

 class TableViewController: TableViewController, UISplitViewControllerDelegate { var collapseDetailViewController: Bool = false override func viewDidLoad() { super.viewDidLoad() splitViewController?.delegate = self } override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { collapseDetailViewController = false } // MARK: - UISplitViewControllerDelegate func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { return false } 

Я также имею расширение UISplitViewController и делаю следующее:

 extension UISplitViewController: UISplitViewControllerDelegate { public override func viewDidLoad() { self.extendedLayoutIncludesOpaqueBars = true } } 

Со всем этим я получаю следующие проблемы;

  • Когда вы нажимаете на tableviewcell чтобы перейти к подробному просмотру, открывается подробный вид в левой панели мастера, когда на iPad в ландшафте вместо правого. Я также не могу понять, как показать Master View в качестве первого вида, когда вы находитесь в «Портрет на iPad» или на iPhone. Эти две проблемы могут быть или не быть связаны Я не уверен.

    введите описание изображения здесь

  • На Mobile есть нижняя панель над панелью вкладок, и я не могу понять, как ее удалить. У меня была та же проблема на iPad, пока я не добавил код в расширение viewDidLoad но это не повлияло на мобильный. Глянь сюда,

введите описание изображения здесь

PS: Я не уверен, что вопрос слишком длинный, я чувствовал, что лучше всего положить все в контекст. Также я проводил много исследований, но я не могу найти какие-либо ресурсы в swift, которые используют UITabBarController.

Я выполнил следующий учебник http://nshipster.com/uisplitviewcontroller/

Вы так близко, просто делайте следующее.

Сохраните макет разделенного вида с подробными сегментами и верните true для следующего метода и удалите остальную часть кода, чтобы сделать с переменной collapseDetailViewController .

 func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { return true } 

Поместите в контроллер Master View следующее:

 self.splitViewController!.delegate = self; self.splitViewController!.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible self.extendedLayoutIncludesOpaqueBars = true 

Добавьте self.extendedLayoutIncludesOpaqueBars = true для вашего контроллера подробных представлений, как указано в предыдущем ответе. Это должно удалить панель, отображаемую на контроллерах вашего представления.

Кроме того, если вам нужна дополнительная функциональность, добавьте следующее, если вы хотите, чтобы ваше подробное представление использовало весь экран на iPad.

 navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem() navigationItem.leftItemsSupplementBackButton = true 

Что касается видимости мастера splitViewController, вам нужно добавить его в ViewDidLoad от splitViewController. Иначе контроллер главного представления присутствует как боковое меню, которое можно перетащить в портретном режиме

 self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible; 

Но этот основной вид детали будет отображаться только в iphone 6 plus и ipad, иначе он будет действовать точно так же, как навигационный контроллер. Поскольку для нажатия контроллера viewController на контроллер навигации вы пытаетесь направить навигационный контроллер на другой контроллер навигации. Я не думаю, что это рекомендуется. Просто переместите segue из контроллера первого вида (где вы вводите текст) во второй (контроллер цветового представления) вместо второго контроллера навигации. Если вам интересно показать информацию в правильном разделе для ipad и iphone6, а в качестве новой страницы для других устройств вы не должны использовать этот способ, удалите push-сег и используйте делегат для передачи информации о том, что данные были изменены и обновлены UI.

Снимок экрана раскадровки

Кроме того, я не думаю, что вам может понадобиться navigationController в качестве страницы с подробными сведениями, просто может быть достаточно цвета viewController, если вас не интересует дальнейшая навигация со страницы сведений.

Для получения подробной информации о поведении контроллера разделенного вида в iphone и iPad просто проверьте https://www.raywenderlich.com/94443/uisplitviewcontroller-tutorial-getting-started

Попробуйте добавить self.extendedLayoutIncludesOpaqueBars = true для вашего viewController viewDidLoad для проблемы с пробелом

  • ios Передача данных из TabbarController в ViewController в раскадровке
  • Связь между 2 ViewControllers в проекте панели бар-бар
  • Каков наилучший подход для создания настраиваемого контроллера панели вкладок?
  • черная полоса в UISplitViewController в UITabBarController
  • Почему установка `hidesBottomBarWhenPushed` на YES с полупрозрачной навигационной анимацией break break?
  • Динамические вкладки вкладки IOS
  • Обновите представление вкладки UITabBar или вызовите метод из представления вкладки UITabBar, когда вкладка будет повторно выбрана.
  • setSelectedImageTintColor не работает в iOS 7
  • iOS UITabBar: удалить верхнюю линию градиента тени
  • MMDrawerController с UITabBarController, показывающим черный зазор сверху центра
  • Самый простой способ добавить TabBar в существующее приложение
  • Давайте будем гением компьютера.