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

Этот NSView будет отображаться в NSStackView:Ограниченный NSView

Другие вопросы по тегам