2016-03-02 84 views
2

对于我的NSSegmentedControl,我用它来显示一个条来控制NSTableView。我有代码设置来以编程方式控制大小:NSSegmentedControl中的等尺寸单元格

for (NSInteger i = 1; i <= numberOfSegments; i++) { 

     CGSize textSize = [[NSString stringWithFormat:@"Workspace %ld", (long)i] sizeWithAttributes:@{NSFontAttributeName: [NSFont systemFontOfSize:13.0f]}]; 

     NSInteger segmentWidth = self.workspaceControl.frame.size.width/numberOfSegments; 

     if (textSize.width > segmentWidth) { 
      [self.workspaceControl setLabel:[NSString stringWithFormat:@"%ld", (long)i] forSegment:i - 1]; 
     } else { 
      [self.workspaceControl setLabel:[NSString stringWithFormat:@"Workspace %ld", (long)i] forSegment:i - 1]; 
     } 

     [self.workspaceControl setWidth:segmentWidth forSegment:i - 1]; 

    } 

这个工作,由一个小问题发生。

在开始的时候(有一个段),它看起来像这样:

before modification

正如我改变值,右侧被稍微裁剪。

4 segments

10 segments

然后回一个片段:

back to one segment

约束如下:

constraints

我非常困惑的削减(可能是因为几个像素t0o大),但我不知道如何解决它,或者有更好的方式来获得均匀间隔的细胞?

回答

0

在我的测试中,尽管setWidth(_ width: CGFloat, forSegment segment: Int)CGFloat,但NSSegmentedControl段的生成宽度约束看起来为整数。因此,段的总宽度可以加起来超过控件本身的宽度。

要通过floor即使段通过segmentWidth。另外,为控制器设置一个手动宽度,并通过centerXAnchor水平约束它,而不是由前导和尾随锚定器保持其中心对齐。

缺点:宽度必须是硬编码的,左右边距可能与您的其他视图完全不符。