窗口的contentView有NSTextFields. (苹果系统)
我正在使用界面构建器来设置窗口及其功能,所以awakeFromNib中没有任何内容,除了这个:
[[self.window contentView] setWantsLayer:YES]; CALayer *layer = [[self.window contentView] layer]; CGColorRef lightGray = CGColorCreateGenericGray(0.93,1.0); [layer setBackgroundColor:lightGray]; CGColorRelease(lightGray);
但是,textField的焦点环在textField的边界之外是不可见的.
带图层:
没有图层:
我认为这个显示问题比这更大,但我找不到这个问题的例子,(和解决方案).
任何人?
解决方法
这是一个众所周知的问题 – 在2008年Cocoa-dev邮件列表上有一个
mention.焦点环实际上被绘制在它的视图框架之外.允许NSView绘图执行此操作,但它不适用于CALayers.尽管在
Leopard AppKit release notes中有一个充满希望的音符,名为“视觉”,“聚焦环”和“绘画表演”,但这并没有改变.
从理论上讲,可以使用文本字段的“图层”框架,并添加一些填充以使聚焦环完全显示.但是,我刚试过这个,似乎至少对于NSTextField来说,它不会在一个改变的帧内整齐地绘制.不过尝试一下 – 我没有长时间大惊小怪. (聚焦环在每个方向上从帧中伸出4个像素.)
就像一个注释,你在技术上打破了层支持的规则,这可能是你遇到困难的部分原因.从NSView setWantsLayer:
docs:
When using layer-backed views you should never interact directly with the layer.
您正在使用图层支持的视图并更改其背景.您可以通过制作自己的图层来解决这个问题,但是:
When using a layer-hosting view you should not rely on the view for drawing,nor should you add subviews to the layer-hosting view.
它排除了在视图中放置文本字段.
(如果需要,请参阅此SO问题:Difference Between Layer-Backed and Layer-Hosting Views?)