Objective c 添加NSSegmentedControl时,NSScrollView不滚动
我使用Interface Builder创建了一个空的NSScrollView 在我的代码中,当用户单击时,我添加了一个NSSegmentedControl。在接下来的所有点击中,我都会添加一个片段 我的问题是,一旦我达到NSScrollView的视觉极限,它就不会开始滚动,而且所有的后期限制段都不会显示 这是Interface Builder中的NSScroll视图: 方法如下: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
- (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];
}
}
这里唯一的问题是所有的线段都是相同的大小,而不是动态的