在 Cocoa App Swift [Mac OS] 中显示在 containerView 内的 NSViewController 不会与 Container 的边界对齐
Posted
技术标签:
【中文标题】在 Cocoa App Swift [Mac OS] 中显示在 containerView 内的 NSViewController 不会与 Container 的边界对齐【英文标题】:NSViewController displayed inside a containerView doesn't align itself to the bounds of the Container in Cocoa App Swift [Mac OS ] 【发布时间】:2019-05-13 06:10:05 【问题描述】:带有容器视图的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
要在容器视图中显示的 NSViewController 的代码
override func viewDidLoad()
super.viewDidLoad()
self.view.wantsLayer=true
self.view.layer?.backgroundColor=NSColor.white.cgColor
我添加了白色层以更好地描述我的问题
我已经在情节提要中正确设置了容器视图的约束,并检查了容器视图是否占据了整个 ViewController。
为什么我的 viewController 只设置为容器视图的一部分而不是全部?
ContainerView 边界控制台图像
您的简历和完整窗口的初始大小为 480*270。那时,您的 vc2 大小也是正确的。但后来我调整了你的整个窗口的大小。 cv 会调整大小,但 vc2 不会。
【问题讨论】:
什么是容器视图边界?可以用一些红色为容器视图着色以更好地可视化吗? 尝试一次viewdid出现 @kerry 改成红色以便更好理解,请立即查看 @Anbu.Karthik 为什么 viewdidappear 兄弟它显示正确 好的,这就是我从您的评论中了解到的。您的简历和完整窗口的初始大小为 480*270。那时,您的 vc2 大小也是正确的。但是随后您调整了整个窗口的大小。您的 cv 调整大小,但不是您的 vc2。对吗? 【参考方案1】:问题在于,当您使用约束时,它们会随着布局的变化而调整大小。但是在 vc2 中,您在一开始就给它一个恒定的大小。这就是为什么即使您调整窗口大小,它也不会调整大小。尝试以编程方式将约束分配给 vc2.view 以将其附加到其父视图 (cv)。这将确保 vc2.view 将使用 cv 调整大小。
确保在cv.addSubview(vc2.view)
之后分配约束。
查看this library,它将在创建约束时删除大量样板代码。
【讨论】:
【参考方案2】:如果您希望在调整 NSViewController(MainViewController) 的大小时调整容器视图的大小,则只需将容器视图添加到主 NSViewcontroller,如屏幕截图所示
为您的容器视图提供以下 AutoLayout 约束: Leading , tralling ,Top , Bottom 约束到超级视图
最后将你的 vc2 连接到容器视图就可以了。
现在,当您调整 MainViewcontroller 的大小时,您的容器视图会自动调整大小。无需在 MainViewController 中为容器视图编写代码。
【讨论】:
我需要以编程方式将视图控制器嵌入到容器视图中,而不是使用情节提要。以上是关于在 Cocoa App Swift [Mac OS] 中显示在 containerView 内的 NSViewController 不会与 Container 的边界对齐的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Cocoa 和 CGDisplayCreateImageForRect 在 Mac OS X 中截取区域截图?
在 Swift、Cocoa、Mac OSX 中将 EXIF 数据设置为 NSImage
我如何在 Mac OS X 上判断我是不是安装了 Carbon 或 Cocoa 版本的 Qt?