对于我的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];
}
这有效,出现了一个小问题。
一开始(有一个片段)看起来像这样:
当我更改值时,右侧会略微修剪。
然后回到一个部分:
约束如下:
我对裁剪感到非常困惑(可能因为几个像素太大了),但我不知道如何修复它,或者是否有更好的方法来获得均匀间隔的单元格?
答案 0 :(得分:1)
在我的测试中,尽管NSSegmentedControl
占用setWidth(_ width: CGFloat, forSegment segment: Int)
,但CGFloat
细分的生成宽度限制似乎四舍五入到整数。因此,段的总宽度可以加起来超过控件本身的宽度。
要使偶数段从segmentWidth
通过floor
。此外,为控件设置手动宽度,并使用centerXAnchor
水平约束它,而不是使用前导和尾随锚点来保持其中心对齐。
缺点:宽度必须是硬编码的,左右边距可能与其他视图不完全匹配。