Обмен VC в представлении контейнера — дочерний VC не подходит для контейнера

Последние версии Swift/XCode/iOS.

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

У меня есть главный VC, который содержит несколько представлений контейнеров. Один Контейнер содержит несколько кнопок (действующих как панель вкладок). Когда вы нажимаете кнопку, контроллер представления в другом контейнере «Подробности» изменяет дочерние VC. Код ниже:

    @IBAction func ToBioPage(_ sender: UIButton) {
    //SET RIGHT PANE VIEW TO BIO PAGE

    //INSTANTIATE NEW VC
    let vc = storyboard?.instantiateViewController(withIdentifier: "Biography")

    //REMOVE OLD VC
    detailPaneVCReference?.willMove(toParentViewController: nil)
    detailPaneVCReference?.view.removeFromSuperview()
    detailPaneVCReference?.removeFromParentViewController()

    //ADD NEW VC
    ParentVC?.addChildViewController(vc!)
    vc?.view.frame = (detailContainerView?.bounds)!
    detailContainerView?.addSubview((vc?.view)!)


    //ADD CONSTRAINTS

    //TOP ANCHOR
    vc?.view.topAnchor.constraint(equalTo: (vc?.view.superview?.topAnchor)!).isActive = true

    //BOTTOM ANCHOR
    vc?.view.bottomAnchor.constraint(equalTo: (vc?.view.superview?.bottomAnchor)!).isActive = true

    //LEADING ANCHOR
    vc?.view.leadingAnchor.constraint(equalTo: (vc?.view.superview?.leadingAnchor)!).isActive = true

    //TRAILING ANCHOR
    vc?.view.trailingAnchor.constraint(equalTo: (vc?.view.superview?.trailingAnchor)!).isActive = true


    vc?.didMove(toParentViewController: ParentVC)


}

Виртуальные контейнеры контейнера деталей меняются местами, но я не могу полностью установить новый контейнер. Детский VC проходит мимо нижней и правой сторон экрана. Наличие ограничений, добавленных выше, кажется, даже не имеет значения. Я получаю тот же результат независимо от того, есть они или нет. Я ожидал, что строка кода frame = bounds гарантирует, что дочерний элемент полностью помещается в контейнер подробностей.

Что я упускаю/делаю не так?

Изменить. Извините, я забыл упомянуть, что "detailPaneVCReference" – это ссылка на начальный виртуальный канал в представлении контейнера, полученная во время перехода к встраиванию. «detailContainerView» — это ссылка на само представление контейнера, которое также захватывается во время перехода к встраиванию. «ParentVC» — это ссылка на MasterVC, захваченный таким же образом.


person Rossco    schedule 03.02.2017    source источник


Ответы (1)


ОК кризис закончился. Оказывается, я проектировал раскадровку для 12-дюймового iPad и работал как 9,7-дюймовый iPad. Несколько представлений имели фиксированные значения высоты/ширины — отсюда и шаткий внешний вид при запуске приложения.

person Rossco    schedule 04.02.2017