Ячейки одинакового размера в NSSegmentedControl
Для меня 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];
}
Это работает, небольшая проблема возникает.
В начале (с одним сегментом) это выглядит так:
Когда я изменяю значение, правая сторона слегка обрезается.
А затем вернемся к одному сегменту:
Ограничения следующие:
Я очень озадачен отсечкой (возможно, потому что пара пикселей слишком большая), но я не знаю, как это исправить, или есть лучший способ получить равномерно расположенные ячейки?
1 ответ
В моем тестировании сгенерированные ограничения ширины NSSegmentedControl
сегменты, кажется, округляются до целых чисел, несмотря на setWidth(_ width: CGFloat, forSegment segment: Int)
принимая CGFloat
, Таким образом, общая ширина сегментов может составлять более ширины самого элемента управления.
Чтобы получить даже сегменты проходят segmentWidth
сквозь floor
, Кроме того, установите ручную ширину для элемента управления и ограничьте ее по горизонтали с помощью centerXAnchor
вместо ведущих и задних якорей, чтобы сохранить его выравнивание по центру.
Недостатки: ширина должна быть жестко задана, а левые и правые поля могут не совпадать с вашими другими видами.