NSScrollView не отображает вертикальную полосу прокрутки после добавления контента - PullRequest
2 голосов
/ 04 января 2010

Я создал NSScrollView, который сам содержит NSClippedView как представление содержимого (это все по умолчанию, созданное IB). В представлении содержимого есть (по умолчанию) представление документа.

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

Когда я добавляю новые представления (с помощью кода, среды выполнения) в представление документа, скроллер не показывается автоматически, пока не произойдет изменение размера окна по вертикали (и, в свою очередь, изменение размера просмотра прокрутки). 1px достаточно. Просто новой окраски окна кажется достаточно.

То, что я ищу, - это запуск по коду: поэтому, когда я добавляю представления в представление содержимого прокрутки, я бы хотел, чтобы появилась полоса прокрутки.

int numberOfChildViews = 10; //hard coded for example here
int childViewHeight = 80; //same as above

NSRect rect = NSMakeRect(0, 0, [[self.scrollView contentView] bounds].size.width, [numberOfChildViews*childViewHeight);
[[self.scrollView documentView] setFrame:rect];
[[self.scrollView documentView] setBounds:rect]; //just added to make sure

Затем я добавил пользовательские виды в вид документа, например:

for (int i=0; i<numberOfChildViews; i++) {
    NZBProgressViewController *item = [nzbProgressArray objectAtIndex:i];

    int y=i*[[item view] bounds].size.height;
    rect= NSMakeRect(0, y, [[scrollView contentView] frame].size.width, [[item view] bounds].size.height);

            [[item view] setFrame:rect];
    currentPosition++;
}

Я использую FlippedView, поэтому начало координат будет отображаться слева вверху, например:

@interface NSFlippedClipView : NSClipView {
}

@implementation NSFlippedClipView
- (BOOL)isFlipped {
    return YES;
}

- (BOOL)isOpaque {
    return YES;
}
@end

И добавил следующий код в awakeFromNib

NSFlippedClipView *documentView = [[NSFlippedClipView alloc] init];
[documentView setAutoresizingMask:NSViewWidthSizable];
[documentView setBackgroundColor:[self.scrollView backgroundColor]];

[self.scrollView setDocumentView:documentView];
[documentView release];

Ответы [ 2 ]

1 голос
/ 05 января 2010

Ааа, это мое плохое. Для дальнейшего использования: если вы хотите переместить начало координат (0,0) в левую верхнюю часть, используйте NSView вместо расширенного класса NSClippedView с методом IsFlipped, переопределяемым на YES.

Спасибо, Ирск, что ответили.

1 голос
/ 05 января 2010

Полосы прокрутки должны стать видимыми, как только размер документа будет изменен, чтобы быть больше, чем текущий видовой экран вида прокрутки Вы меняете размер представления документа, когда добавляете в него свои подпредставления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...