2011-11-16 36 views
3

我有一个基于视图的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; 
    } 
} 

然而,当我这样做,我结束了这个结果(有新列的蓝色部分和主塔的开始之间的大非蓝保证金):

enter image description here

当附加列不存在时,没有余量,因此我非常确定问题不在其他视图中(因为当它是唯一显示的视图时没有余量)。

我已经使用日志语句来验证纯色视图的边界总是宽度为40(在drawRect :)中,并且至少在创建视图时,表列的宽度也是40。

那么这个边界从哪里来?无论我如何确定专栏的大小,似乎只有大约一半是蓝色的。所以,柱子越大,边距越大。

如何使整个额外的列变蓝?

+0

这可能是一个错误。基于视图的表格视图非常新,所以可能值得向苹果发送错误报告。 –

+0

事实证明,我的问题是在绘制字体名称的视图中。不过,我仍然不知道发生了什么。感谢Rob建议我提交一个错误,因为这导致我创建了最简单的应用程序并将其解决。 –

回答

3

问题在于我很愚蠢:在绘制字体名称的视图中,我在[自定义框架]上定位了位置。这是错误的。

[自定义]是要走的路。我知道的。不能相信我犯了这个错误。业余时间。

如果你在这个问题上徘徊,随时投票关闭它或标记它或任何它应该在Stackoverflow上工作。

我的歉意。