【问题标题】:Programmatically created NSView does not appear when added to parent view添加到父视图时,以编程方式创建的 NSView 不会出现
【发布时间】:2015-07-29 18:50:19
【问题描述】:

我的 ViewController 中有以下代码

@IBAction func showView(sender: AnyObject) {
    show()
}

func show() {

    let viewHeight: CGFloat = self.view.frame.height
    let viewWidth: CGFloat = self.view.frame.width
    let posX: CGFloat = self.view.frame.origin.x
    let posY: CGFloat = self.view.frame.origin.y
    let viewFrame: CGRect = CGRectMake(posX, posY, viewWidth, viewHeight)

    let view: NSView = NSView(frame: viewFrame)
    view.layer?.backgroundColor = NSColor.redColor().CGColor

    self.view.addSubview(view)

}

我不明白为什么单击showView 按钮后 NSView 没有出现?作为健全性检查,我尝试将调用(​​以及稍后的代码)移至 viewDidLoad 方法,但仍然无济于事。

我错过了什么?

【问题讨论】:

  • 自己解决。你有一个调试器。调试!高度、宽度、x 和 y 值是否符合您的预期?视图是否真的有一个层,或者你的红色是否失败(这样你最终会得到一个你看不到的清晰视图)?

标签: macos swift cocoa nsview


【解决方案1】:

问题是你从来没有说过

view.wantsLayer = true

所以您的视图没有图层,并且对图层应用背景颜色没有效果,因为(正如我刚才所说)您的视图没有图层。所以视图就在那里,但您无法看到它;它是透明的,就像隐形人一样。

【讨论】:

  • 你说我应该为自己调试是完全正确的。我为宽度/高度和位置做了那个......从来没有为CALayer做过。现在我知道。感谢您的及时回复!
  • 分配到可选展开的 Optional (view.layer?) 的乐趣在于您不会崩溃。缺点是你不知道有没有发生任何事情! :) 有办法找出来,但我们不能做任何假设......
  • 我完全明白了!我愚蠢地假设 NSView 默认使用 CALayer!再次感谢您的意见。下次发生这种情况时,我会仔细阅读文档并进行适当的调试。
猜你喜欢
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多