Autolayout внутри NStableView на основе просмотра
-
21-12-2019 - |
Вопрос
У меня есть 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] - | я получаю решительно неожиданный результат - красные ряды, а не признаки моего зеленого вида!
Есть ли несколько дополнительных шагов, я должен взять сюда?Моя цель состоит в том, чтобы мой просмотрокнуть на самом деле быть немного меньшим видом, чтобы подделать «пробелы» между строками и расстоянием между краями таблицы ..
Решение
В случае, если кто-нибудь когда-либо наткнулся на это. Оказывается, что NstableCellView немного рана без минимального размера - добавление (>= 10) на вертикальное ограничение позаботились о выпуске ..