Autolayout à l'intérieur d'un NSTableView basé sur la vue
-
21-12-2019 - |
Question
J'ai un nstableview (basé sur la vue) qui crée une ligne;
- (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;
}
Cette ligne crée quelques sous-visions et attribue certaines contraintes;
- (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];
}
Le plaisir commence quand j'essaie de modifier les contraintes. La viewwebackground est juste un nsview vide qui définit son arrière-plan.Quand la contrainte est | [Viewwewackground] |Pour les personnes horizontales et verticales, je reçois le résultat attendu - des rangées vertes.Quand je le change au plus fondamental | - [Viewwewackground] - |, je reçois un résultat résolument inattendu - des rangées rouges et aucun signe de ma vue verte!
Y a-t-il une étape supplémentaire que je suis censée prendre ici?Mon objectif est d'avoir ma vie-ci-même une vue légèrement plus petite, de simuler les «lacunes» entre rangées et l'espacement des bords de la vue de la table ..
La solution
Si quiconque tonne jamais sur ceci. Il s'avère que NStablecellView est un peu bonsky sans taille min - ajoutant (>= 10) sur la contrainte verticale pris en charge le problème.