我有一个使用Interface Builder创建的空NSScrollView。
在我的代码中,我在用户点击时添加了NSSegmentedControl。对于所有下次点击,我都会添加一个细分。
我的问题是,一旦达到NSScrollView的可视限制,它就不会开始滚动,所有的限制后段都不会显示。
这是Interface Builder的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];
}
问题在于:
(嗯,它更可能是“没有滚动”而不是“不可滚动”)
答案 0 :(得分:0)
好的,我做了一些测试,问题不是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];
}
}
这里唯一的问题是所有细分都是相同的尺寸而不是动态的......