Как создать прокручиваемый вид с вкладкой в ​​нем? - PullRequest
0 голосов
/ 01 апреля 2020

Я получил NSTabView внутри NSView. Этот NSView находится в NSClipView, который, в свою очередь, находится в NSScrollView. Это выглядит так (NSTabView в зеленом и NSView в красном):

enter image description here

Как видите, содержимое NSTabView обрезается, и нет появляются полосы прокрутки (поскольку представление не расширяется за пределы окна).

Как я могу заставить NSTabView занимать столько места, сколько ему нужно (не вырезать), и расширять NSView вместе с ним? Затем NSScrollView может справиться с прокруткой переросшего NSView.

Поскольку мой контент изменяется динамически, я не хочу вводить некоторые жесткие значения для ширины и высоты суперпредставления NSTabView.

Это только часть этого; вот теперь общая иерархия выглядит так:

enter image description here

Я хочу, чтобы суперпредставление NSTabView было прокручиваемым, а не вырезанным, как здесь:

enter image description here

1 Ответ

1 голос
/ 01 апреля 2020

Настройка, которую я опишу, предназначена для NSTabView, который будет прикреплен к верхней, левой и правой сторонам прокрутки. Обратите внимание, что NSTabView можно заменить любым другим NSView, настройки такие же.

enter image description here

Начиная с помещения прокрутки в xib / storyboard, у вас будет NSScrollView -> NSClipView -> NSView (document view). Ограничьте NSScrollView к краям окна. Бросьте свой NSTabView на экземпляр NSView. Добавьте ограничения так, чтобы ваши ограничения NSTabView edge равнялись NSView и определяли ограничение высоты явно или неявно с другим содержимым внутри представления вкладки, которое его определяет.

enter image description here

Лично мне нравится изменять макет экземпляра NSView (представление документа), чтобы использовать ограничения, по умолчанию он использует маски автоматического изменения размера, и это затрудняет синхронизацию c с NSTabView. Мы хотим, чтобы вид документа был закреплен сверху, слева и справа от вида прокрутки. Размер этого вида определяет прокручиваемую область, поэтому мы хотим, чтобы он был того же размера, что и NSTabView, поэтому высота представления с вкладками будет определять прокручиваемую область.

Чтобы изменить это, выберите вид документа и в Инспекторе размеров мы хотим изменить тип «Макет» на «Automati c».

enter image description here

Наконец, добавьте ограничения к top, left и right, и вам должно быть хорошо go.

Если вы хотите, чтобы представление прокрутки начиналось сверху, а не снизу, вы должны создать подкласс представления документа и переопределить isFlipped:

class FlippedView: NSView {
    override var isFlipped: Bool { true }
}
...