Последние версии 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, захваченный таким же образом.