3

对于我来说NSSegmentedControl,我用它来做显示一个栏来控制一个NSTableView。我设置了代码以编程方式控制大小:

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];
        
    }

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

一开始(有一段)它看起来像这样:

修改前

当我更改值时,右侧会被略微剪裁。

4段

10段

然后回到一个片段:

回到一个片段

约束如下:

约束

我对剪辑感到非常困惑(可能是因为几个像素太大了),但我不知道如何修复它,或者有没有更好的方法来获得均匀间隔的单元格?

4

1 回答 1

1

在我的测试中,NSSegmentedControl尽管setWidth(_ width: CGFloat, forSegment segment: Int)使用了CGFloat. 因此,段的总宽度可以加起来超过控件本身的宽度。

要获得偶数段segmentWidth,请通过floor. centerXAnchor此外,为控件设置手动宽度,并通过而不是通过前导和尾随锚点将其水平约束,以保持其中心对齐。

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

于 2017-02-15T21:26:37.870 回答