NSStackView размещает NSViews на базовой линии
Изучив большую часть документации Apple (о ее недостаточности), касающейся NSStackView, а также мудрые слова о расширении Интернета, в том числе коллективную мудрость Stackru, проблема остается.
Любой NSView, который я добавляю программно в мой (экземпляр IB) NSStackView, визуально располагается в нижней части соответствующей области гравитации. Следовательно, они перекрывают друг друга и не ведут себя как ожидаемый "стек" представлений с соответствующим интервалом.
Каждая из областей гравитации кажется как-то сжатой и неспособной вместить больше видов. Чем больше я применяю NSStackView.addView к области гравитации, тем тоньше становятся существующие виды.
Я ожидаю, что NSStackView естественным образом расширится, чтобы приспособиться к размеру встроенных представлений.
Любой мудрый совет ценится...
--- больше деталей—
Я помещаю StackView в главное окно, используя построитель интерфейса. Затем я могу добавить другие виды в области стека в построителе интерфейса, такие как кнопки. Эти стек и макет, как ожидается, в IB и при запуске.
Однако, когда я добавляю или вставляю любой вид программным способом в любую область гравитации, их нижний край располагается вертикально вниз до нижнего края StackView. Это поведение макета одинаково для вертикального или горизонтального стека.
Следовательно, если я добавлю более одного вида программно, они будут иметь размер ОК и отображаться, но будут перекрываться. Я использую объекты "NSBox" в качестве представлений (на данный момент), и они имеют размеры, используя ".sizeToFit()". Я вижу, что их.bounds.height и width не равны нулю.
Я не уверен, как установить или зарегистрировать внутренний размер контента. Это может быть следующая вещь, чтобы попробовать.
-неудачно-
Итак, теперь я тщательно проработал все варианты: сжатие, объятие, (ненулевое) внутреннее определение размера, ограничения, никаких ограничений и различные типы NSViews, но... если я '.addView(...)' или '.insertView(...)' более одного раза в любой области гравитации 'NSStackView' последующие виды перекрывают предыдущие и располагаются на конкретной базовой линии. Это край, ближайший к полу моего офиса, независимо от ориентации стека.
Любая помощь NSStackView и AutoLayout, как эмоциональная, так и техническая, приветствуется.
1 ответ
Так что, похоже, все проблемы с NSStackView проистекают из его ограничений. Вы должны предоставить ограничения для подпредставлений в правильной форме. Самый простой способ сделать это - поместить объект / представление с твердыми ограничениями в каждое подпредставление стека.
В Интерфейсном Разработчике, когда я помещаю простой NSImageView с размером, шириной и ведущими ограничениями в NSView, который станет подпредставлением Stackview, стек отображается правильно.
Однако, если у меня есть только пустые NSViews в моем NSStackView, даже если стилизованы и назначены кадры, NSView не будет отображаться, или все представления будут сгруппированы с базовой линией.
Этот NSView НЕ будет отображаться в NSStackView:
Этот NSView будет отображаться в NSStackView: