2016-03-02 59 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水平約束它,而不是由前導和尾隨錨定器保持其中心對齊。

缺點:寬度必須是硬編碼的,左右邊距可能與您的其他視圖完全不符。