我有一个基于视图的NSTableView,它通常有一列。但是,按下按钮时,我想要从左侧滑入一个新列(非常类似于单击“邮件”中的“编辑”按钮时iPhone上发生的情况)。现在,我想要滑动的视图是一个非常简单的视图,它绘制了一个坚实的背景:它的drawRect:只是
[[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。
那么这个边际来自哪里?无论我如何调整色谱柱,看起来只有大约一半是蓝色。因此,色谱柱越大,余量越大。
如何将整个额外列设为蓝色?
答案 0 :(得分:3)
问题是我的愚蠢:在绘制字体名称的视图中,我基于[self frame]的位置。哪个错了。
[自我限制]是要走的路。我知道的。简直不敢相信我犯了这个错误。业余时间。
如果你徘徊在这个问题上,请随意投票关闭它或标记它或者它应该在Stackoverflow上工作的任何东西。
道歉。