首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSScrollView在添加NSSegmentedControl时不滚动

NSScrollView在添加NSSegmentedControl时不滚动
EN

Stack Overflow用户
提问于 2014-08-13 12:45:34
回答 1查看 271关注 0票数 0

我用Interface创建了一个空的NSScrollView。

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

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

这是来自Interface的NSScrollView:

下面是一个方法:

代码语言:javascript
复制
- (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];
}

问题是:

(嗯,“没什么可滚动的”比“不可滚动”更有可能)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-13 14:26:22

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

在添加更多段时,我从来没有找到一种简单的方法来获得NSSegmentedControl的实际大小(更新的大小),所以我做了以下工作:

  • 我强迫我所有的片段都保持相同的大小(100点宽)。
  • 在追加段时,我将NSSegmentedControl的框架更新100点

以下是代码:

代码语言:javascript
复制
-(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];
    }
}

这里唯一的问题是所有的片段都是相同的大小而不是动态的..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25286571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档