UISplitViewController внутри панели вкладок

У меня есть приложение, в котором есть экран входа в систему, и когда пользователь входит в систему, нажимается контроллер панели вкладок. В настоящее время у меня есть некоторые взгляды, которые выиграют от того факта, что теперь яблоко позволяет использовать контроллер разделенного представления на всех устройствах iOS, поэтому я готовился реализовать это, когда читаю, что UISplitViewController всегда должен быть контроллером корневого представления. Поэтому мне было интересно, возможно ли, чтобы представление на одной из вкладок стало представлением мастера-детали с помощью UISplitViewController или мне нужно будет реализовать это вручную?

В случае, если невозможно отобразить разделенное представление в виде вкладки, можно ли его вытолкнуть из контроллера панели вкладок? (например, пользователь удаляет строку в виде таблицы и отображает представление главной детали).

Ответы

Ответ 1

Вы можете встроить UISplitViewController внутри UITabBarController. Я сделал именно это для приложения, которое я выпустил в App Store. Он имеет 3 вкладки, и каждый из них является контроллером с разделенным изображением.

Просто перетащите контроллер панели вкладок в свою раскадровку, удалите два контроллера, которые он добавил, затем перетащите контроллер разделенного представления. Управляйте перетаскиванием из контроллера панели вкладок в контроллер разделенного вида и выбирайте соотношение "контроллеры представлений".

В версиях Xcode, меньших, чем Xcode 8, вы можете видеть черные или белые полосы сверху и снизу контроллера разделенного вида в холсте Interface Builder, но они не будут отображаться, когда приложение будет запущено на устройстве.

enter image description here

Вот приложение работает, чтобы показать разделенный вид, встроенный в контроллер панели вкладок на iPhone 6s Plus:

enter image description here

Ответ 2

Когда вы помещаете UISplitViewController внутри UITabBarController, а на панели вкладок установлено opaque, у вас есть проблема, когда ваш контент UISplitViewController сдвинут размер панели вкладок

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

Чтобы устранить эту проблему, вы должны установить флажок Under Opaque Bars на вашем UISplitViewController в своем раскадровке:

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

И теперь размер представления UISplitViewController правильно вычисляется:

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

Ответ 3

Также существует проблема с использованием этого подхода в iPhone ( > IOS8), где splitviewcontroller находится в сложенном режиме. Когда мы перетаскиваем представление списка в представление детали, мы не можем скрыть панель управления tabbar с помощью обычного "hidesBottomBarWhenPushed". Поэтому я добавил TabBarcontroller в качестве корневого контроллера управления навигационным контроллером. Теперь, когда я нажимаю на подробное представление, я отправляю сообщение корневому навигационному контроллеру и нажимаю представление на экземпляр представления деталей в спящем режиме, тогда как в обычном режиме я просто нажимаю его, используя showDetailsViewController()