修改NSScroller的长度

时间:2011-08-16 08:22:21

标签: objective-c cocoa macos nsscrollview nsscroller

我在我的Cocoa应用程序中使用NSScrollView,我想自定义水平滚动条的长度。滚动视图的内容分为两个主要区域:左侧的固定宽度区域和右侧的动态宽度区域。左侧区域仅垂直滚动 - 当用户向左和向右滚动时,它保持固定在视图的左侧。这是滚动视图的屏幕截图:

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

我不希望水平滚动条与左侧的固定区域重叠。它应该局限于右边的区域。

如果没有子类化NSScrollView,有没有办法做到这一点?我真的更喜欢不必子类,但如果有必要,我这样做时应该注意什么?

我尝试过设置水平滚动条的框架,但我认为NSScrollView会不断调整滚动条的大小以适应整个区域。

2 个答案:

答案 0 :(得分:4)

我认为在这种情况下,我会使用两个单独的滚动视图,一个在另一个内部。

好的,我和一位朋友确认过,事实证明,在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];
}

答案 1 :(得分:1)

我会在你的窗口中添加两个NSScrollViews。左边的那个只支持垂直滚动,右边的那个支持水平滚动。