2014-01-23 7 views
0

У меня есть пользовательский подкласс NSView, и я помещаю его в NSScrollView, и основы работают нормально. Он всегда занимает всю ширину доступного пространства, поэтому его ограничения занимают всю ширину прокрутки. Сколько вертикального пространства он занимает, зависит от того, сколько данных он должен отображать, поэтому он может прокручиваться только по вертикали. Это здорово.Пользовательский NSView в NSScrollView, который занимает все видимое пространство

Уловка заключается в том, что если мой пользовательский вид требует меньше места, чем NSScrollView, в котором он находится, он не расширяется, чтобы заполнить видимую область. В случаях, когда в видимой области меньше данных, чем подходит, я хочу, чтобы он расширялся вниз - так что пространство доступно как цель перетаскивания, среди прочего.

  • Я попытался изменить свой «приоритет». Я попытался добавить ограничение, чтобы нижняя часть была ниже нижней части NSClipView. Я не могу придумать какое-либо решение на основе ограничений, чтобы исправить это (хотя я также не исключал возможности).

  • Я пытался поймать уведомления, когда NSScrollView изменяет размер и настройку кадра пользовательского вида, если он слишком мал, но (предположительно потому, что я могу изменить только его текущих кадра, в то время как система компоновки делает все раскладку позже) Я тоже не могу сделать эту работу.

Есть трюк для добавления представления к NSScrollView таким образом, что он расширяется в нижней части видимой области, всякий раз, когда это было бы в противном случае быть слишком коротким? Похоже, это должно быть так просто, и я делал это раньше, в случаях, когда я просто звоню -setFrame на все вручную, но как только вы перейдете в мир автозапуска, этот подход перестанет работать.

+0

Вы пытались добавить ограничение высоты «yourView.height> = parentView.height», где parentView является клипом? У меня была аналогичная проблема, как и у вас, и следующее работало для меня: myView.width> = clipview.width, myview.height> = clipview.height; и избавиться от ошибок IB: myview.centerXY = clipview.centerXY (remove at buildtime), установка заполнитель для intrinsicSize myview –

ответ

0

Не зная, каковы ваши ограничения и обнимание содержимого и сжатие содержимого на самом деле ... Обнимание содержимого хотя бы одним концом, имеющим> = ограничение для просмотра, может это сделать, но вам может потребоваться настроить приоритеты. Возможно, вам также понадобится убедиться, что вы внедрили intrinsicContentSize в свой пользовательский класс просмотра, это говорит об объявлении и сжатии содержимого, что им нужно знать.

+0

Предположим, что все значения по умолчанию, например, новое приложение Xcode Cocoa, помещают NSScrollView в окне создайте новый подкласс NSView, установите представление документа в этот класс и запустите. Представление документа не распространяется на вид прокрутки (о чем свидетельствует его ведение журнала или его рисование как «NSRectFill ([self bounds])», даже если он имеет «intrinsicContentSize» и даже с приоритетом вертикального обхода 1 , – Lonelyisland

Смежные вопросы