Как использовать один ContainerView для отображения нескольких ViewControllers - PullRequest
0 голосов
/ 30 ноября 2018

Мой сценарий таков, что сейчас мое приложение использует 12 ViewControllers.У каждого есть два ContainerViews, которые содержат одинаковый набор элементов управления (я назову их контрольными группами), и я показываю их через сегменты.Пока это работает, однако, я должен макетировать и устанавливать ограничения для тех же двух ContainerViews 12 раз - один раз для каждого VC.И если я добавлю другой VC, то мне придется выложить их снова и т. Д. Если я изменю какую-либо часть своего макета, то мне придется изменять все 12 снова и снова - это не очень масштабируемо.

Кажется,для меня было бы легче, если бы две группы управления были на одном VC, который также содержит ContainerView.Затем, если ContainerView мог бы переключаться между каждым из двенадцати представлений, было бы намного проще поддерживать.

Например, что-то вроде этого макета:

enter image description here

Этот макет показывает два контейнера управления "Верхний" и "Нижний" на одном и том же VC.между ними будет ContainerView, который будет показывать требуемый VC.

Конечно, ContainerViews могут встраивать только один VC, поэтому самое близкое решение, которое я видел, это поместить 12 ContainerView друг на друга - кажетсявсе еще довольно грязно.

Мне не обязательно требовать использования ContainerView - однако, есть некоторые приятные функции, такие как ограничение размера виртуального канала и его соответствие его размерам, что делает размещение содержимогопроще.

Как я могу получить такую ​​структуру и поведение?(Примечание: я бы тоже хотел использовать раскадровку)

1 Ответ

0 голосов
/ 30 ноября 2018

Из проекта, с которым я работаю:

enter image description here

Добавьте столько контейнеров, сколько хотите, в свой контроллер основного вида.Затем в своем коде измените значения alpha, чтобы показать / скрыть их.Например:

@IBOutlet weak var timelineContainerView: UIView!
@IBOutlet weak var albumsContainerView: UIView!


@IBAction func journeySegmentedControlValueChanged(_ sender: UISegmentedControl) {
    switch sender.selectedSegmentIndex {
    case 0:
        timelineContainerView.alpha = 1.0
        albumsContainerView.alpha = 0.0
    case 1:
        timelineContainerView.alpha = 0.0
        albumsContainerView.alpha = 1.0
    default:
        break
    }
}

Если у вас много контроллеров, вы можете использовать группу IBOutlet.

...