无法关闭在 Interface Builder 中创建的 NSView 实例的剪辑

Posted

技术标签:

【中文标题】无法关闭在 Interface Builder 中创建的 NSView 实例的剪辑【英文标题】:Can't turn off clipping of NSView instances created in Interface Builder 【发布时间】:2015-01-03 16:19:05 【问题描述】:

当我在 Interface Builder 中定义自定义视图时,我无法弄清楚如何关闭子视图/子层剪辑。当我以编程方式创建视图并在 *** 上的许多问题中进行设置时,它适用于添加到视图的子视图和添加到 view.layer 的子层。那些东西是:

((NSView*)containingWindow.contentView).wantsLayer = YES;
view.wantsLayer = YES;
view.layer.masksToBounds = NO;

一旦完成(按此顺序),一切都适用于在代码中创建的视图。如果我为在 IB 中创建的视图做同样的事情(或其他任何事情),我将一事无成。

我尝试过使用定义方法的自定义 NSView:

- (CALayer*)makeBackingLayer 
    CALayer* layer = [CALayer layer];
    layer.masksToBounds = NO;

    return layer;


- (BOOL)wantsDefaultClipping 
    return NO;

没有帮助。我还尝试在 IB 的 View Effects 中选中“Core Animation Layer”下的框。那也没有帮助。最后,我尝试关闭约束,以防万一。也没有用。

感谢任何帮助。我注意到的一件事是,我的支持层视图“masksToBounds”以我设置它的方式开始为 NO,但是当我稍后记录视图层次结构时,它在同一个视图上变为 YES(通过其内存地址验证。)

【问题讨论】:

您找到答案了吗?我有类似的问题,虽然我没有使用 IB。 【参考方案1】:

试试:

myView.wantsDefaultClipping = NO;

对子视图也这样做。

【讨论】:

"wantsDefaultClipping" 不是要设置的属性,只是必须在自定义视图中实现的方法。是的,我试过了。 是的,和 CALayer 的等价物 (childLayer.maskstoBounds = NO;)。唯一的区别似乎是主视图是从 NIB 创建还是在代码中完成。

以上是关于无法关闭在 Interface Builder 中创建的 NSView 实例的剪辑的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Interface Builder 中关闭键盘,因为视图控制器不会显示 doneEditing:

无法在 Interface Builder 中绑定 UISearchBar

无法在 Interface Builder 中连接 IBOutlet

swift : 无法与 Interface Builder 通信

是否可以在 Interface Builder 和 Auto Layout 中说“使这个 UILabel 以另一个 UILabel 的中心为中心”? [关闭]

使用 Interface Builder 进行切换