Ios ContainerView导致中断UIViewController的约束
我的应用程序有三个Ios ContainerView导致中断UIViewController的约束,ios,swift,uiviewcontroller,uicontainerview,Ios,Swift,Uiviewcontroller,Uicontainerview,我的应用程序有三个UIViewController()。第一个是EmptyVC,第二个是在UITableView中显示数据的我的视图。第三个是容器视图,用于将这些UIViewController()彼此分离。当没有可用数据时,所有这些都是使用脚本创建的,容器显示EmptyVC,当数据出现时,它显示myUITableView()。以下是我的ContainerVC class FidelityContainerVC: UIViewController { private var presen
UIViewController()
。第一个是EmptyVC
,第二个是在UITableView
中显示数据的我的视图。第三个是容器视图,用于将这些UIViewController()彼此分离。当没有可用数据时,所有这些都是使用脚本创建的,容器显示EmptyVC
,当数据出现时,它显示myUITableView()
。以下是我的ContainerVC
class FidelityContainerVC: UIViewController {
private var presentingVC: UIViewController?
private var state: State?
private let fidelityVC = FidelityVC()
override func viewDidLoad() {
super.viewDidLoad()
transition(to: .render(fidelityVC))
transition(to: .loading)
}
func transition(to newState: State) {
presentingVC?.remove()
let vc = viewController(for: newState)
add(vc)
presentingVC = vc
state = newState
}
}
extension FidelityContainerVC {
enum State {
case loading
case render(UIViewController)
}
}
private extension FidelityContainerVC {
func viewController(for state: State) -> UIViewController {
switch state {
case .loading:
return EmptyVC()
case .render(let viewController):
return viewController
}
}
}
Add
和remove
是UIViewController
的扩展方法
extension UIViewController {
func add(_ child: UIViewController) {
addChild(child)
view.addSubview(child.view)
child.didMove(toParent: self)
}
func remove() {
guard parent != nil else {
return
}
willMove(toParent: nil)
view.removeFromSuperview()
removeFromParent()
}
}
我的问题是,当我将我的EmptyVC
添加到ContainerVC
时,约束被破坏,视图不相关。我不明白是什么原因造成的。原因可能是什么?我如何解决这个问题?如果以编程方式将视图添加到superview,则必须在之后立即以编程方式为其添加约束。没有约束就没有实现的方法吗@阿斯佩里诺。在自动布局前的时代,我们总是做同样的事情——设置帧+自动调整大小的遮罩。布局系统如何知道在何处放置新添加的视图。