objective-c - NSScrollView添加内容后不显示垂直滚动条

标签 objective-c cocoa macos user-interface

我创建了一个 NSScrollView,它本身包含一个 NSClippedView 作为内容 View (这都是默认的,由 IB 创建)。内容 View 内有(默认)文档 View 。

这个 NSScrollView 禁用了水平滚动条,启用了垂直滚动条,最重要的是启用了自动隐藏滚动条。

当我向文档 View 添加新 View (通过代码、运行时)时,滚动条不会自动取消隐藏,直到我垂直调整窗口大小(反过来也调整 ScrollView 的大小)。 1px就够了。只是 window 的新画似乎就足够了。

我正在寻找的是通过代码触发此操作:因此,当我将 View 添加到 ScrollView 的内容 View 时,我希望滚动条出现。

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

然后我将自定义 View 添加到文档 View 中,例如:

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];

最佳答案

一旦文档 View 的大小调整为大于 ScrollView 的当前视口(viewport),滚动条就应该变得可见。当您向文档 View 添加 subview 时,是否会调整文档 View 的大小?

关于objective-c - NSScrollView添加内容后不显示垂直滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2002175/

相关文章:

iphone - 如何删除警告 "Frame for Button will be different at run time."

ios - 为 UIButton 设置边框

iOS9 应用传输安全

macos - 如何在Mac上的沙箱中启动另一个进程?

macos - 使 NSTextField 可滚动

mysql - OSX 10.10 Yosemite my.cnf 未被读取无法正常工作

objective-c - 用户自定义 UITableViewCells 的正确方法

objective-c - 在Cocoa/Obj-C中,如何捕获cmd-c事件?

objective-c - NSTask 应用程序失去焦点

xcode - 如何将 OSX 上的 Xcode 更新到最新版本?