Изменение длины NSScroller

Я использую NSScrollView в своем приложении Какао и хочу настроить длину горизонтального скроллера. Содержимое прокрутки разделено на две основные области: область фиксированной ширины слева и область динамической ширины справа. Левая область прокручивается только по вертикали - она ​​остается фиксированной в левой части представления, когда пользователь прокручивает влево и вправо. Вот скриншот прокручиваемого вида:

http://jarodlong.com/dropbox/nsscroller_issue.png

Я не хочу, чтобы горизонтальный скроллер перекрывал фиксированную область слева. Он должен быть ограничен областью справа.

Есть ли способ сделать это без создания подкласса NSScrollView? Я бы действительно предпочел не создавать подклассы, но если это необходимо, на что я должен обратить внимание при этом?

Я пробовал просто установить рамку горизонтального скроллера, но я думаю, что NSScrollView постоянно меняет размер скроллера, чтобы он соответствовал всей области.


person jlong64    schedule 16.08.2011    source источник


Ответы (2)


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

Хорошо, я проверил с другом, и оказалось, что на Lion у вас все еще есть NSScroller экземпляры в NSScrollview, хотя они нарисованы на поверхности GL. Не тестировалось, но что-то вроде этого должно помочь:

@implementation MyScrollView : NSScrollView

- (void) tile
{
[super tile];
id scroller = [self horizontalScroller];
NSRect scrollerRect = [scroller frame];
   // adjust scrollerRect as you want to here
[scroller setFrame:scrollerRect];
}
person NSResponder    schedule 16.08.2011
comment
Вероятно, это был бы лучший путь, если бы я думал сделать это с самого начала, но весь контент представляет собой единое представление, и на этом этапе было бы довольно сложно реорганизовать его в несколько представлений. Все работает отлично, кроме размера полосы прокрутки, поэтому, если есть способ просто изменить размер полосы прокрутки, это было бы самым простым решением прямо сейчас. - person jlong64; 16.08.2011
comment
Что ж, вернувшись к Snow Leopard, вы могли бы просто создать подкласс NSScrollview и переопределить -tile, но я не уверен, что новые автоматически скрывающиеся скроллеры по-прежнему являются экземплярами NSScroller. - person NSResponder; 18.08.2011
comment
На самом деле это сработало отлично! Я как-то пропустил тайловый метод (возможно, потому, что название не очень указывает на его назначение), но новые скроллеры Lion, похоже, по-прежнему являются NSScrollers. - person jlong64; 19.08.2011
comment
Код, отредактированный в вашем ответе, отлично работает. Огромное спасибо! - person jlong64; 19.08.2011

Я бы добавил в ваше окно два NSScrollView. Тот, что слева, поддерживает только вертикальную прокрутку, и тот, который прокручивается по горизонтали, справа.

person lbrndnr    schedule 16.08.2011