带有 CA 图层掩码的 NSScrollView 添加了第二个无用的滚动条

Posted

技术标签:

【中文标题】带有 CA 图层掩码的 NSScrollView 添加了第二个无用的滚动条【英文标题】:NSScrollView with CA layer mask adds a second useless scrollbar 【发布时间】:2013-11-19 21:31:21 【问题描述】:

我为表格添加了一个自定义的 NSScrollView,为了将所有内容都隐藏在窗口形状中,我使用核心动画图层蒙版来剪辑它,它的子视图如下所示:

- (void)drawRect:(NSRect)dirtyRect 
    [super drawRect:dirtyRect];

    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    CGMutablePathRef cgPath = CGPathCreateMutable();

    //Make path here

    [maskLayer setPath:cgPath];

    self.wantsLayer = YES;
    self.layer.mask = maskLayer;
    self.layer.masksToBounds = YES;

虽然面具本身工作正常,但它在另一边给了我这个克隆的“幽灵”滚动条:

滚动条的大部分都被表格本身所覆盖,但我将单元格视图移动了一点,以显示它是如何向下继续的。滚动条与右侧的大小相同,并且不会移动或响应单击或滚动。

当我隐藏窗口并重新打开它时,它完全消失了。是否与未正确重绘滚动条有关?

【问题讨论】:

【参考方案1】:

由于我已经从 XIB 加载了视图,并且由于这不需要持续绘制,而不是从 initWithFrame 或 drawRect 调用它,我应该从 awakeFromNib 调用它:

- (void)awakeFromNib 
    [super drawRect:dirtyRect];

    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    CGMutablePathRef cgPath = CGPathCreateMutable();

    //Make path here

    [maskLayer setPath:cgPath];

    self.wantsLayer = YES;
    self.layer.mask = maskLayer;
    self.layer.masksToBounds = YES;

【讨论】:

以上是关于带有 CA 图层掩码的 NSScrollView 添加了第二个无用的滚动条的主要内容,如果未能解决你的问题,请参考以下文章

带有特定掩码的Matlab imcrop

.Net - 在文件名中使用带有掩码的 FileIOPermission

java 带有信用卡掩码的Android TextInputLayout

读取带有网络和子网掩码的 csv 并写入带有 ping 结果的文件

选择带有由 isnull() 创建的 2D 布尔掩码的数据框

带有域掩码的 WordPress 站点的 htaccess 重定向不起作用