NSScrollView滚动条不响应或被禁用

时间:2011-06-27 18:54:04

标签: objective-c cocoa macos

我手动构建并在其中添加NSScrollView和子视图。

  1. 如果子视图大于NSScrollView而不是滚动条,但我移动滚动条没有任何反应。

  2. 如果子视图与NSSCrollView的大小相同,并且我使窗口变小,则不会出现滚动条。

  3. 我做错了什么?

2 个答案:

答案 0 :(得分:3)

您使用的是setDocumentView还是addSubview?如果您使用addSubview,那将无效,您需要使用setDocumentView将视图设置为“滚动”NSScrollView

NSScrollView实例会自动显示您的视图。如果您要覆盖此行为,则可以继承NSScrollView并覆盖-tile

答案 1 :(得分:1)

迟到一个月偶然发现了你的问题,但对于其他有同样问题的人来说......

Apple的文档在这里有一个很好的解决方案,对我有用:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TextUILayer/Tasks/TextInScrollView.html

他们的答案是面向NSTextView,但似乎任何NSView子类都应该有效。

// Create scroll view & set its properties
NSScrollView *scrollview = [[NSScrollView alloc] initWithFrame:[[theWindow contentView] frame]];
NSSize contentSize = [scrollview contentSize];
[scrollview setBorderType:NSNoBorder];
[scrollview setHasVerticalScroller:YES];
[scrollview setHasHorizontalScroller:NO];
[scrollview setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

// Create text view and set its properties, setting content size same as scroll view
NSTextView* theTextView = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, contentSize.width, contentSize.height)];
[theTextView setMinSize:NSMakeSize(0.0, contentSize.height)];
[theTextView setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)];
[theTextView setVerticallyResizable:YES];
[theTextView setHorizontallyResizable:NO];
[theTextView setAutoresizingMask:NSViewWidthSizable];
// Leave these two off if it isn't an NSTextView...
[[theTextView textContainer] setContainerSize:NSMakeSize(contentSize.width, FLT_MAX)];
[[theTextView textContainer] setWidthTracksTextView:YES];

// And connect up the view hierarchy
[scrollview setDocumentView:theTextView];
[theWindow setContentView:scrollview];
[theWindow makeKeyAndOrderFront:nil];
[theWindow makeFirstResponder:theTextView];

比我预期的要长很多,但它确实有效。 :)