我发现了一个奇怪的绘图错误。我有一个基于NSTableView的视图,带有简单的行或文本单元格。当我按下向下箭头,选择一行时,tableview中的所有文本都向左移动1个像素,然后当我选择下一行时,它会返回。很奇怪。
我删除了所有行或单元格的子类,并用标准内容替换它们,但它仍然会发生。
之前有人见过这个吗?
答案 0 :(得分:0)
如果你继承了#34; NSTableRowView"并使用它来点亮所选行"。
这通常发生在左边或右边的边框上。
根据苹果示例名为" TableViewPlaygound" (可以在这里找到:https://developer.apple.com/library/mac/samplecode/TableViewPlayground/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010727),这是他们使用的,我经常使用它来快速和脏地复制和粘贴高光照明:
- (void)drawSelectionInRect:(NSRect)dirtyRect {
NSColor *primaryColor = [[NSColor alternateSelectedControlColor] colorWithAlphaComponent:0.4];
NSColor *secondarySelectedControlColor = [[NSColor secondarySelectedControlColor] colorWithAlphaComponent:0.4];
// Implement our own custom alpha drawing
switch (self.selectionHighlightStyle) {
case NSTableViewSelectionHighlightStyleRegular: {
if (self.selected) {
if (self.emphasized) {
[primaryColor set];
} else {
[secondarySelectedControlColor set];
}
NSRect bounds = self.bounds;
const NSRect *rects = NULL;
NSInteger count = 0;
[self getRectsBeingDrawn:&rects count:&count];
for (NSInteger i = 0; i < count; i++) {
NSRect rect = NSIntersectionRect(bounds, rects[i]);
NSRectFillUsingOperation(rect, NSCompositeSourceOver);
}
}
break;
}
default: {
// Do super's drawing
[super drawSelectionInRect:dirtyRect];
break;
}
}
}
-(void)drawSeparatorInRect:(NSRect)dirtyRect
{
NSRect sepRect = self.bounds;
sepRect.origin.y = NSMaxY(sepRect) - 1;
sepRect.size.height = 1;
sepRect = NSIntersectionRect(sepRect, dirtyRect);
if (!NSIsEmptyRect(sepRect)) {
[[NSColor gridColor] set];
NSRectFill(sepRect);
}
}