我有一个基于视图的NSTableView,通常有一列。但是,在按下按钮时,我需要从左侧滑入一个新列(非常类似于单击Mail中的编辑按钮时在iPhone上发生的情况)。现在,我想滑动的观点是在画一个坚实的背景很简单的观点:它的drawRect:少了点查看备份NSTableView:插入列宽/边距问题
[[NSColor blueColor] set];
[[NSBezierPath bezierPathWithRect:[self bounds]] fill];
在委托我NSTableView的,我有以下几点:
- (IBAction)buttonPressed:(id)sender
{
NSTableColumn *newColumn = [[NSTableColumn alloc] initWithIdentifier:@"InPreviewColumn"];
[newColumn setWidth:40];
[newColumn setMinWidth:[newColumn width]];
/* To make up for there not being an insertColumnAt: method,
hide the column, add it, and move it to the front before showing it. */
[newColumn setHidden:YES];
[availableFontsView beginUpdates];
[availableFontsView addTableColumn:newColumn];
[availableFontsView moveColumn:1 toColumn:0];
[availableFontsView endUpdates];
[newColumn setHidden:NO];
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
/* ... code for main column ... */
else if([[tableColumn identifier] isEqualToString:@"InPreviewColumn"])
{
USSolidBackgroundView *v = [tableView makeViewWithIdentifier:[tableColumn identifier] owner:self];
if(!v)
{
v = [[[USSolidBackgroundView alloc] initWithFrame:NSMakeRect(0, 0, [tableColumn width], 0)] autorelease];
[v setIdentifier:[tableColumn identifier]];
[v setAutoresizingMask:NSViewMinXMargin | NSViewWidthSizable | NSViewMaxXMargin];
}
return v;
}
}
然而,当我这样做,我结束了这个结果(有新列的蓝色部分和主塔的开始之间的大非蓝保证金):
当附加列不存在时,没有余量,因此我非常确定问题不在其他视图中(因为当它是唯一显示的视图时没有余量)。
我已经使用日志语句来验证纯色视图的边界总是宽度为40(在drawRect :)中,并且至少在创建视图时,表列的宽度也是40。
那么这个边界从哪里来?无论我如何确定专栏的大小,似乎只有大约一半是蓝色的。所以,柱子越大,边距越大。
如何使整个额外的列变蓝?
这可能是一个错误。基于视图的表格视图非常新,所以可能值得向苹果发送错误报告。 –
事实证明,我的问题是在绘制字体名称的视图中。不过,我仍然不知道发生了什么。感谢Rob建议我提交一个错误,因为这导致我创建了最简单的应用程序并将其解决。 –