无法关闭在界面生成器中创建的NSView实例的裁剪

问题描述:

我无法弄清楚如何在界面生成器中定义自定义视图时关闭子视图/子图层裁剪。当我以编程方式创建视图并在StackOverflow中执行许多问题时发现的设置时,对于添加到视图的子视图和添加到view.layer的子图层都可以正常工作。这些东西是:无法关闭在界面生成器中创建的NSView实例的裁剪

((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中的“核心动画层”下检查框。这也没有帮助。最后,我尝试关闭约束,以防万一是有责任的。也没有工作。

任何帮助表示赞赏。我注意到的一件事是我的支持图层视图“masksToBounds”从我设置它的方式开始NO,但是当我稍后登录视图层次时,它在相同视图上已变为YES(由其内存地址验证)。

+0

您是否找到了答案?我有类似的问题,虽然我没有使用IB。 – 2015-11-27 15:09:08

尝试:

myView.wantsDefaultClipping = NO; 

并做到这一点也为孩子的意见。

+0

“wantsDefaultClipping”不是要设置的属性,而只是必须在自定义视图中实现的方法。是的,我试过了。 – 2014-11-07 20:14:33

+0

@Eric并尝试了孩子的意见? – nicael 2014-11-07 20:15:17

+0

是的,和CALayer(childLayer.maskstoBounds = NO;)的等价物。唯一的区别似乎是主视图是从NIB创建还是在代码中完成。 – 2014-11-07 22:59:44