Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 添加NSSegmentedControl时,NSScrollView不滚动_Objective C_Xcode_Macos_Nsscrollview_Nssegmentedcontrol - Fatal编程技术网

Objective c 添加NSSegmentedControl时,NSScrollView不滚动

Objective c 添加NSSegmentedControl时,NSScrollView不滚动,objective-c,xcode,macos,nsscrollview,nssegmentedcontrol,Objective C,Xcode,Macos,Nsscrollview,Nssegmentedcontrol,我使用Interface Builder创建了一个空的NSScrollView 在我的代码中,当用户单击时,我添加了一个NSSegmentedControl。在接下来的所有点击中,我都会添加一个片段 我的问题是,一旦我达到NSScrollView的视觉极限,它就不会开始滚动,而且所有的后期限制段都不会显示 这是Interface Builder中的NSScroll视图: 方法如下: - (IBAction)addSegment:(id)sender { if (segCtrlColumn

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

在我的代码中,当用户单击时,我添加了一个NSSegmentedControl。在接下来的所有点击中,我都会添加一个片段

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

这是Interface Builder中的NSScroll视图:

方法如下:

- (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];
}
问题是:


好吧,没有什么比不可滚动更容易滚动的了好吧,我做了一些测试,问题不是nsscrollview,而是nssegmentedcontrol。它根本不会更新其帧大小。因此,它被固定在我在initWithFrame中设置的宽度上——这是scrollView的大小。这就是为什么NSScrollView从未开始滚动

我从来没有找到一个简单的方法来获得NSSegmentedControl的实际大小,随着更多的段被添加,所以我做了这个技巧:

我强迫我所有的片段都是相同的大小,宽度为100点 在附加段时,我将NSSegmentedControl的帧更新100个点 代码如下:

-(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];
    }
}
这里唯一的问题是所有的线段都是相同的大小,而不是动态的