我用Interface创建了一个空的NSScrollView。
在我的代码中,我在用户单击时添加了一个NSSegmentedControl。在接下来的点击中,我会添加一个片段。
我的问题是,一旦我达到了NSScrollView的视觉限制,它就不会开始滚动,所有的限制后段都不会显示出来。
这是来自Interface的NSScrollView:

下面是一个方法:
- (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];
}问题是:

(嗯,“没什么可滚动的”比“不可滚动”更有可能)
发布于 2014-08-13 14:26:22
好的,我做了一些测试,问题不是nsscrollview,而是nssegmentedcontrol。它根本不更新它的帧大小。因此,它被卡在了我在initWithFrame中设置的宽度--这是scrollView的大小。(这就是为什么NSScrollView从未开始滚动)
在添加更多段时,我从来没有找到一种简单的方法来获得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];
}
}这里唯一的问题是所有的片段都是相同的大小而不是动态的..。
https://stackoverflow.com/questions/25286571
复制相似问题