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()