我的 View Controller 有一个 NSView,我将其用作容器 View 。 我从库中拖动了“容器 View ”,删除了 segue 和嵌入式 View Controller ,向 super View ( View Controller 的主视图)添加了约束,并在 View Controller 的代码中设置了容器 View 的导出。
到目前为止一切顺利。
我希望将容器 View 的内容与在运行时确定的几个不同 View Controller 的主视图交换。我已经成功地做到了这一点,代码如下:
func swapContainerViewContents(with viewController: NSViewController) {
self.containerView.subviews.foreach({ subview in
subview.removeFromSuperview()
})
containerView.addSubview(viewController.view)
}
这是可行的,但是一旦我调整窗口大小, subview 显然会保持其原始大小(我没有设置任何约束)。
如果我添加必要的约束:
let newView = viewController.view
containerView.addSubview(newView)
newView.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true
newView.rightAnchor.constraint(equalTo: containerView.rightAnchor).isActive = true
newView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
newView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
...现在,窗口无法调整大小! (它停留在 subview 的初始大小)。
如何做到这一点?
最佳答案
事实证明,我需要做的就是在设置约束之前添加这一行:
newView.translatesAutoresizingMaskIntoConstraints = false
我不清楚为什么我需要这个,因为我想要添加的 subview 属于从 Storyboard创建的 View Controller (并且这些应该已经>不将自动调整大小掩码转换为约束...?);仅当以编程方式创建的 View 需要此代码...
关于macos - Cocoa 中的容器 View ,在运行时交换内容并保留大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45727897/