2014-02-26 131 views
0

我有一個NSTableView(基於視圖)創建一個行;Autolayout在基於視圖的NSTableView中

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    TaskTableCellView *tableCellView = [[TaskTableCellView alloc] init]; 
    return tableCellView; 
} 

-(void) tableView:(NSTableView *)tableView didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row { 
    NSView *view = [rowView viewAtColumn:0]; 
    [view setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    NSDictionary *views = NSDictionaryOfVariableBindings(view); 
    [tableView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:views]]; 
    [tableView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:views]]; 
} 

- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row { 
    return 20; 
} 

此行創建一些子視圖並分配一些約束;

- (void)layout { 
    [super layout]; 
    ViewWithBackground *viewWithBackground = [[ViewWithBackground alloc] init]; 
    viewWithBackground.backgroundColor = [NSColor greenColor]; 
    [self addSubview:viewWithBackground]; 

    [viewWithBackground setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    NSDictionary *views = NSDictionaryOfVariableBindings(viewWithBackground); 
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[viewWithBackground]|" 
                   options:0 
                   metrics:nil 
                    views:views]]; 
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[viewWithBackground]|" 
                   options:0 
                   metrics:nil 
                    views:views]]; 

    [viewWithBackground setContentHuggingPriority:200 forOrientation:NSLayoutConstraintOrientationVertical]; 
    [viewWithBackground setContentHuggingPriority:200 forOrientation:NSLayoutConstraintOrientationHorizontal]; 
} 


- (void)drawRect:(NSRect)dirtyRect { 
    [[NSColor redColor] set]; 
    NSRectFill(dirtyRect); 
    [super drawRect:dirtyRect]; 
} 

樂趣開始當我真正嘗試編輯約束.. viewWithBackground只是一個空的NSView,設置它的背景。當約束是| [viewWithBackground] |時對於水平和垂直方向,我都會得到預期的結果 - 綠色的行。當我將其更改爲最基本的| - [viewWithBackground] - |時,我會得到一個意想不到的結果 - 紅色的行,並且沒有我的綠色視圖標誌!

我應該在這裏採取一些額外的步驟嗎?我的目標是讓我的viewWithBackground實際上是一個稍微小一點的視圖,以僞造行之間的「間隙」和距離桌面視圖邊緣的間距..

回答

1

如果有人曾經絆倒在這..事實證明那NSTableCellView是有點沒有最小尺寸 - 在垂直約束上加上(> = 10)來處理這個問題。

相關問題