添加NSSegmentedControl时,NSScrollView不会滚动

时间:2014-08-13 12:45:35

标签: objective-c xcode macos nsscrollview nssegmentedcontrol

我有一个使用Interface Builder创建的空NSScrollView。

在我的代码中,我在用户点击时添加了NSSegmentedControl。对于所有下次点击,我都会添加一个细分。

我的问题是,一旦达到NSScrollView的可视限制,它就不会开始滚动,所有的限制后段都不会显示。

这是Interface Builder的NSScrollView:

enter image description here

以下是方法:

- (IBAction)addSegment:(id)sender
{
    if (segCtrlColumns == nil) {
        segCtrlColumns = [[NSSegmentedControl alloc] initWithFrame:[self.viewColumns frame]]; //self.viewColumns is the NSScrollView from IBOutlet
        [segCtrlColumns setSegmentCount:1];
        [segCtrlColumns setLabel:@"Test" forSegment:0];
        [segCtrlColumns setTarget:self];
    } else {
        double increaseSegments = [segCtrlColumns segmentCount]+1;
        [segCtrlColumns setSegmentCount:increaseSegments];
        [segCtrlColumns setLabel:@"Test" forSegment:increaseSegments-1];
    }
    [self.viewColumns setDocumentView:segCtrlColumns];
}

问题在于:

enter image description here

(嗯,它更可能是“没有滚动”而不是“不可滚动”)

1 个答案:

答案 0 :(得分:0)

好的,我做了一些测试,问题不是nsscrollview而是nssegmentedcontrol。它根本不更新其帧大小。所以它停留在我在initWithFrame中设置的宽度 - 这是scrollView的大小。 (这就是为什么NSScrollView从未开始滚动)

我从未找到过如何获得NSSegmentedControl的实际大小(更新大小)的简单方法,因为添加了更多段,所以我做了这个伎俩:

  • 我强制我所有的片段大小相同(宽度为100点)
  • 当我追加细分时,我用另外100个点更新NSSegmentedControl的框架

这是代码:

-(IBAction)addColumn:(id)sender
{
    if (segCtrlColumns == nil) {
        //Init with a single segment with 100 points (pixels) width
        segCtrlColumns = [[NSSegmentedControl alloc] initWithFrame:NSMakeRect(0, 0, 100.0, 30.0)];
        [segCtrlColumns setSegmentCount:1];
        [segCtrlColumns setWidth:96.0 forSegment:0]; //The segment has some borders to concider in its size
        [segCtrlColumns setLabel:@"Testing" forSegment:0];
        [segCtrlColumns setTarget:self];
        //Tell the scrollview, the documentView is my segmented control
        [self.viewColumns setDocumentView:segCtrlColumns];
    } else {
        //Add a segment and update the frame size
        double increaseSegments = [segCtrlColumns segmentCount]+1;
        [segCtrlColumns setFrame:NSMakeRect(0, 0, segCtrlColumns.frame.size.width+100.0, 30.0)];
        [segCtrlColumns setSegmentCount:increaseSegments];
        [segCtrlColumns setWidth:96.0 forSegment:increaseSegments-1];
        [segCtrlColumns setLabel:@"Testing" forSegment:increaseSegments-1];
    }
}

这里唯一的问题是所有细分都是相同的尺寸而不是动态的......