Ячейки одинакового размера в 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];

    }

Это работает, небольшая проблема возникает.

В начале (с одним сегментом) это выглядит так:

до модификации

Когда я изменяю значение, правая сторона слегка обрезается.

4 сегмента

10 сегментов

А затем вернемся к одному сегменту:

вернуться к одному сегменту

Ограничения следующие:

ограничения

Я очень озадачен отсечкой (возможно, потому что пара пикселей слишком большая), но я не знаю, как это исправить, или есть лучший способ получить равномерно расположенные ячейки?

1 ответ

В моем тестировании сгенерированные ограничения ширины NSSegmentedControl сегменты, кажется, округляются до целых чисел, несмотря на setWidth(_ width: CGFloat, forSegment segment: Int) принимая CGFloat, Таким образом, общая ширина сегментов может составлять более ширины самого элемента управления.

Чтобы получить даже сегменты проходят segmentWidth сквозь floor, Кроме того, установите ручную ширину для элемента управления и ограничьте ее по горизонтали с помощью centerXAnchor вместо ведущих и задних якорей, чтобы сохранить его выравнивание по центру.

Недостатки: ширина должна быть жестко задана, а левые и правые поля могут не совпадать с вашими другими видами.

Другие вопросы по тегам