NSStackView показывает только новейший пользовательский вид
У меня есть пользовательский класс контроллера представления. Я хочу создать несколько пользовательских контроллеров представления и добавить их представления в мой NSStackView. Я добавляю новый вид в вид стека, нажимая кнопку. Кнопка вызывает этот метод:
[stackView insertView:myCustomViewController.view atIndex:0 inGravity:NSStackViewGravityBottom];
Однако, когда добавляется новый вид, он добавляется stackView.spacing
ниже того места, где был предыдущий вид, но этот предыдущий вид больше не виден, однако он по-прежнему отображается как вид в моей нижней гравитации, что подтверждается при вызове
NSLog(@"%lu",(unsigned long)[stackView viewsInGravity:NSStackViewGravityBottom].count);
У меня нет этой проблемы, если я пытаюсь добавить NSButton
s, так что это как-то связано с моим пользовательским видом, но я не могу понять, что.
Пожалуйста помоги. Спасибо!
1 ответ
Вы должны убедиться, что ваш пользовательский вид имеет ограничения (или внутренний размер контента), которые полностью определяют высоту вида. Если они этого не делают, эти представления рушатся до 0 высот (то же самое случилось со мной раньше).
Вы можете проверить, происходит ли это:
[stackView insertView:myCustomViewController.view atIndex:0 inGravity:NSStackViewGravityBottom];
[stackView layoutSubtreeIfNeeded];
NSLog(@"%f - %d", NSHeight(myCustomViewController.view.frame), [myCustomViewController.view hasAmbiguousLayout]);
С StackView вы увидите, что последующие выдают "0 - 1". Высоты 0, и они неоднозначны.
Вертикальный NSStackView будет только позиционировать виды по вертикали, но не даст определенной высоты. (То же самое для горизонтальных стеков и ширины).