У меня есть NSScrollView, который настроен на поддержку слоя, щелкнув галочку слоя на scrollview в IB. Внутри этого scrollview у меня есть NSTableView. В этом NSTableView я использую пользовательский NSTableRowView для рисования вертикальной красной линии на разделителе между моими столбцами. Мой NSTableView имеет 2 столбца. Когда мой scrollview установлен для поддержки слоя, всякий раз, когда я перетаскиваю разделитель столбцов, чтобы сделать столбец более широким или узким, drawBackgroundInRect не вызывается, поэтому моя фоновая вертикальная линия не обновляется во время операции перетаскивания.drawBackgroundInRect не вызывается в режиме с поддержкой слоя
Есть ли обходной путь для этого?
Вот код, я использую в drawBackgroundInRect:
- (void)drawBackgroundInRect:(NSRect)dirtyRect {
[super drawBackgroundInRect:dirtyRect];
NSGraphicsContext *nscontext = [NSGraphicsContext currentContext];
[nscontext saveGraphicsState];
CGContextRef context = (CGContextRef)[nscontext graphicsPort];
if (!self.isGroupRowStyle) {
CGRect leftColumnRect = [(NSView *)[self viewAtColumn:0] frame];
leftColumnRect.origin.y -= 1.0;
leftColumnRect.size.height += 2.0;
leftColumnRect.size.width += 1.0;
// grey background
CGContextSetGrayFillColor(context, 0.98, 1.0);
CGContextFillRect(context, leftColumnRect);
// draw nice red vertical line
CGContextBeginPath(context);
CGContextSetRGBStrokeColor(context, 0.6, 0.2, 0.2, 0.3);
CGContextMoveToPoint(context, leftColumnRect.size.width + 1.5, 0);
CGContextSetLineWidth(context, 1.0);
CGContextAddLineToPoint(context, leftColumnRect.size.width + 1.5, leftColumnRect.size.height);
CGContextStrokePath(context);
}
[nscontext restoreGraphicsState];
}
Вот проблема, которую я получаю при изменении размера колонки:
И это то, что он должен выглядеть например, когда у меня нет моего набора scrollview для поддержки на основе слоев:
Спасибо!