如何以编程方式将视图添加到 NSWindow(或 NSView)?
How to programatically add views to NSWindow (or NSView)?
我的 ViewController 中有此代码。然而,我以编程方式添加的视图无处可见。
override func viewDidLoad() {
super.viewDidLoad()
let f: NSRect = NSMakeRect(0, 0, 200, 200)
let v: NSView = NSView(frame: f)
v.layer?.backgroundColor = NSColor.yellowColor().CGColor
self.view.addSubview(v)
}
此外,我尝试创建一个自定义 NSWindowController 并将其设置为界面构建器故事板中我的主要 Window 的自定义 Class。我有以下代码:
override func windowDidLoad() {
super.windowDidLoad()
let f: NSRect = NSMakeRect(0, 0, 200, 200)
let v: NSView = NSView(frame: f)
v.layer?.backgroundColor = NSColor.yellowColor().CGColor
self.window?.contentView?.addSubview(v)
}
这也不起作用:/
我什至尝试将 v.wantsLayer = true
设置为我在网上找到的建议答案之一,但这从一开始就显得很奇怪,当然什么也没做。
我在这里做错了什么?
回答我自己的问题,因为我用尽了所有可能的情况,当然罪魁祸首最终是 wantsLayer
。
最初我做了:
override func windowDidLoad() {
super.windowDidLoad()
let f: NSRect = NSMakeRect(32, 32, 200, 200)
let v: NSView = NSView(frame: f)
v.layer?.backgroundColor = NSColor.greenColor().CGColor
v.wantsLayer = true
self.window?.contentView?.addSubview(v)
if let views = self.window?.contentView?.subviews {
for v in views {
print(v.frame)
}
}
}
我可以看到视图已添加到 contentView,但它是不可见的。在我意识到我的错误之前,我做了很多事情:
v.wantsLayer = true
声明需要(当然)在我指定图层本身的背景颜色的行上方。
所以是的......这现在有效:
override func windowDidLoad() {
super.windowDidLoad()
let f: NSRect = NSMakeRect(32, 32, 200, 200)
let v: NSView = NSView(frame: f)
v.wantsLayer = true
v.layer?.backgroundColor = NSColor.greenColor().CGColor
self.window?.contentView?.addSubview(v)
}
我的 ViewController 中有此代码。然而,我以编程方式添加的视图无处可见。
override func viewDidLoad() {
super.viewDidLoad()
let f: NSRect = NSMakeRect(0, 0, 200, 200)
let v: NSView = NSView(frame: f)
v.layer?.backgroundColor = NSColor.yellowColor().CGColor
self.view.addSubview(v)
}
此外,我尝试创建一个自定义 NSWindowController 并将其设置为界面构建器故事板中我的主要 Window 的自定义 Class。我有以下代码:
override func windowDidLoad() {
super.windowDidLoad()
let f: NSRect = NSMakeRect(0, 0, 200, 200)
let v: NSView = NSView(frame: f)
v.layer?.backgroundColor = NSColor.yellowColor().CGColor
self.window?.contentView?.addSubview(v)
}
这也不起作用:/
我什至尝试将 v.wantsLayer = true
设置为我在网上找到的建议答案之一,但这从一开始就显得很奇怪,当然什么也没做。
我在这里做错了什么?
回答我自己的问题,因为我用尽了所有可能的情况,当然罪魁祸首最终是 wantsLayer
。
最初我做了:
override func windowDidLoad() {
super.windowDidLoad()
let f: NSRect = NSMakeRect(32, 32, 200, 200)
let v: NSView = NSView(frame: f)
v.layer?.backgroundColor = NSColor.greenColor().CGColor
v.wantsLayer = true
self.window?.contentView?.addSubview(v)
if let views = self.window?.contentView?.subviews {
for v in views {
print(v.frame)
}
}
}
我可以看到视图已添加到 contentView,但它是不可见的。在我意识到我的错误之前,我做了很多事情:
v.wantsLayer = true
声明需要(当然)在我指定图层本身的背景颜色的行上方。
所以是的......这现在有效:
override func windowDidLoad() {
super.windowDidLoad()
let f: NSRect = NSMakeRect(32, 32, 200, 200)
let v: NSView = NSView(frame: f)
v.wantsLayer = true
v.layer?.backgroundColor = NSColor.greenColor().CGColor
self.window?.contentView?.addSubview(v)
}