Objective c NSScrollView没有';t添加内容后显示垂直滚动条
我创建了一个NSScrollView,它本身包含一个NSClippedView作为内容视图(这都是默认值,由IB创建)。在内容视图中有(默认)文档视图 此NSScrollView禁用了水平滚动条,启用了垂直滚动条,最重要的是启用了自动隐藏滚动条 当我将新视图(通过代码、运行时)添加到文档视图时,滚动条不会自动取消隐藏,直到我垂直调整窗口大小(这反过来也会调整滚动视图的大小)的那一刻。一个就够了。仅仅是窗户的新画就足够了 我所寻找的是由代码触发的:因此,当我向ScrollView的内容视图添加视图时,我希望滚动条出现Objective c NSScrollView没有';t添加内容后显示垂直滚动条,objective-c,cocoa,macos,user-interface,Objective C,Cocoa,Macos,User Interface,我创建了一个NSScrollView,它本身包含一个NSClippedView作为内容视图(这都是默认值,由IB创建)。在内容视图中有(默认)文档视图 此NSScrollView禁用了水平滚动条,启用了垂直滚动条,最重要的是启用了自动隐藏滚动条 当我将新视图(通过代码、运行时)添加到文档视图时,滚动条不会自动取消隐藏,直到我垂直调整窗口大小(这反过来也会调整滚动视图的大小)的那一刻。一个就够了。仅仅是窗户的新画就足够了 我所寻找的是由代码触发的:因此,当我向ScrollView的内容视图添加视图
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++;
}
并将以下代码添加到awakeFromNib
NSFlippedClipView *documentView = [[NSFlippedClipView alloc] init];
[documentView setAutoresizingMask:NSViewWidthSizable];
[documentView setBackgroundColor:[self.scrollView backgroundColor]];
[self.scrollView setDocumentView:documentView];
[documentView release];
当文档视图的大小调整为大于滚动视图的当前视口时,滚动条应立即可见。将子视图添加到文档视图时,是否正在调整文档视图的大小?啊,这是我自己的问题。供将来参考:如果要将原点(0,0)移动到左上角,请使用NSView而不是NSClippedView扩展类,并将IsFlipped方法重写为YES
谢谢你的回答。谢谢你的回答。今晚我将发布代码。我要做的是:在awakefromnib期间,将scrollview的文档视图设置为nsclipview的自定义重载,只翻转重载方法,这将导致YES使原点左上方。在将动态内容添加到文档视图期间,我将此视图称为NSFlippedClipView。我将文档视图的大小调整为:contenview的垂直大小(即documentview上的“视口”)和自定义视图数的高度*自定义视图的高度。这是一个很好的答案,因为文档中不清楚在添加子视图时是否应该手动调整文档视图的大小。
NSFlippedClipView *documentView = [[NSFlippedClipView alloc] init];
[documentView setAutoresizingMask:NSViewWidthSizable];
[documentView setBackgroundColor:[self.scrollView backgroundColor]];
[self.scrollView setDocumentView:documentView];
[documentView release];