2016-03-02 9 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

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

ответ

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^