我为一个表添加了一个自定义的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;
}
然而,虽然面具本身工作正常,但它给了我另一面克隆的“幽灵”滚动条:
表格本身覆盖了大部分滚动条,但我将一个单元格视图移动了一下以显示它是如何继续向下移动的。滚动条的大小与右侧的滚动条相同,不会移动或响应单击或滚动。
当我隐藏窗口然后重新打开它时,它完全消失了。是否与滚动条没有正确重绘有关?
答案 0 :(得分:0)
由于我从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;
}