swift - 显示在 containerView 中的 NSViewController 不与 Cocoa App Swift [Mac OS] 中容器的边界对齐

标签 swift macos cocoa

容器 View 的NSViewcontroller代码

@IBOutlet weak var cv: NSView!
override func viewDidLoad() {
    super.viewDidLoad()
      let vc2 = storyboard?.instantiateController(withIdentifier: "vc2") as! VC2
    addChild(vc2)
    vc2.view.frame=cv.bounds
    cv.addSubview(vc2.view)
    cv.wantsLayer=true
    cv.layer?.backgroundColor=NSColor.red.cgColor

}

要在容器 View 中显示的NSViewController的代码

   override func viewDidLoad() {
    super.viewDidLoad()
    self.view.wantsLayer=true
    self.view.layer?.backgroundColor=NSColor.white.cgColor

}

我添加了白色图层以更好地描述我的问题 enter image description here

我已经在 Storyboard 中正确设置了容器 View 的约束,并检查了容器 View 是否也占据了整个 ViewController。

为什么我的 viewController 只设置了容器 View 的一部分而不是全部?

ContainerView 边界控制台图像 enter image description here

您的简历和完整窗口的初始大小为 480*270。那时,您的 vc2 大小也是正确的。但后来我调整了你的整个窗口。 cv 会调整大小但 vc2 不会。

最佳答案

问题是,当您使用约束时,它们会随着布局的变化而调整大小。但是在 vc2 中,你在一开始就给了它一个恒定的大小。这就是为什么即使您调整窗口大小,它也不会调整大小。尝试以编程方式将约束分配给 vc2.view 以将其附加到其 super View (cv)。这将确保 vc2.view 将随 cv 调整大小。

确保在 cv.addSubview(vc2.view) 之后分配约束。

查看 this library这将在创建约束时删除大量样板代码。

关于swift - 显示在 containerView 中的 NSViewController 不与 Cocoa App Swift [Mac OS] 中容器的边界对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56106597/

相关文章:

ios - 试图更好地理解委托(delegate)

macos - 如何在 Mac 上的终端脚本的 if 语句中使用命令?

cocoa - 用数据填充 NSOutlineView - Swift

swift - python 范围方法在 swift 中等效

ios - 从 IOS 中的 UItableView 中的自定义单元格继续

macos - 如何在 Mac OSX 上安装 PostgreSQL-contrib-9.3?

objective-c - Cocoa App 启动闪屏

swift - 当 UICollectionView 和 UICollectionViewCell 位于 XIB 文件中时,子视​​图为零

ios - 相机人脸检测

objective-c - 为什么 ARC 迁移器说 NSInvocation 的 -setArgument : is not safe unless the argument is __unsafe_unretained?