Autolayout all'interno di un NStableView basato su vista
-
21-12-2019 - |
Domanda
Ho una NStableView (basata su vista) che crea una riga;
- (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;
}
.
Questa riga crea alcune sottoviews e assegna alcuni vincoli;
- (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];
}
.
Il divertimento inizia quando cerco effettivamente di modificare i vincoli .. ViewWithBackBackground è solo una NSVIEW Vuota che imposta lo sfondo.Quando il vincolo è | [ViewWithBackground] |Per entrambi orizzontali e verticali, ottengo il risultato atteso - righe verdi.Quando lo cambio al più basilare | - [ViewwithAbackground] - |, ottengo un risultato decisamente inaspettato - file rosse, e nessun segno della mia vista verde!
C'è qualche passo aggiuntivo che dovrei prendere qui?Il mio obiettivo è quello di avere il mio viewwithackground effettivamente essere una vista leggermente più piccola, per falsificare le "lacune" tra le file e la spaziatura dai bordi della vista tabella ..
Soluzione
Nel caso in cui chiunque fosse inciampa su questo .. Si scopre che NSTABLeCellView è un po 'wwky senza dimensioni minuscole - aggiungendo (>= 10) sul vincolo verticale si è occupato del problema ..