Есть ли способ сделать кнопку UISegmentedControl разных размеров? - PullRequest
5 голосов
/ 23 августа 2011

У меня есть UISegmentedControl с 2 элементами.

Есть ли способ сделать левый элемент немного больше правого?

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:symbol,@"+", nil]];
        [segmentedControl addTarget:self action:@selector(segmentedControlChanged:)forControlEvents:UIControlEventValueChanged];
        [segmentedControl setWidth:45 forSegmentAtIndex:0];
        [segmentedControl setWidth:20 forSegmentAtIndex:1];
        segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
        segmentedControl.frame = CGRectMake(0,0,300,30);
        segmentedControl.momentary = NO;
        [segmentedControl setSelectedSegmentIndex:0];

        self.navigationItem.titleView = segmentedControl;

Не работает.

Ответы [ 5 ]

12 голосов
/ 23 августа 2011

да, вы можете сделать это: -

    [*yoursegmentcontrolobjectname* setWidth:45 forSegmentAtIndex:0];
    [*yoursegmentcontrolobjectname* setWidth:15 forSegmentAtIndex:1];   

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:symbol,@"+", nil]];
        [segmentedControl addTarget:self action:@selector(segmentedControlChanged:)forControlEvents:UIControlEventValueChanged];
        segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
        segmentedControl.frame = CGRectMake(0,0,300,30);
        segmentedControl.momentary = NO;
        [segmentedControl setSelectedSegmentIndex:0];

        self.navigationItem.titleView = segmentedControl;

добавить эти две строки сейчас, тогда это будет работать

        [segmentedControl setWidth:45 forSegmentAtIndex:0];
        [segmentedControl setWidth:20 forSegmentAtIndex:1];
9 голосов
/ 23 августа 2011

Конечно. Вы можете использовать -setWidth:forSegmentAtIndex: (обязательно сделайте это после того, как вы установите границы / рамку сегментированного элемента управления), или просто измените ширину в вашем файле интерфейса (кажется, это не работает в панели навигации , только в другом месте):

enter image description here

5 голосов
/ 12 декабря 2012

Если вы просто хотите настроить размер элемента сегмента в соответствии с его содержимым, используйте это свойство BOOL:

apportionsSegmentWidthsByContent

и установите его в YES (по умолчанию NO)

4 голосов
/ 16 октября 2012

Обновление iOS 6

В iOS 5 и ниже мы должны вызвать setWidth: forSegmentAtIndex: после того, как для настройки фрейма и других свойств дисплея он заработал.Это исправлено в iOS 6, и порядок больше не имеет значения.

2 голосов
/ 23 августа 2011

Сделайте ваш setWidth:forSegmentAtIndex: вызов после вашего вызова `setFrame: '. Это должно делать свое дело. В большинстве случаев в Cocoa Touch упорядочение не имеет большого значения, лишь бы все было сделано до конца кода. В этом случае порядок имеет значение.

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:symbol,@"+", nil]];
        [segmentedControl addTarget:self action:@selector(segmentedControlChanged:)forControlEvents:UIControlEventValueChanged];
        segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
        segmentedControl.frame = CGRectMake(0,0,300,30);
        [segmentedControl setWidth:45 forSegmentAtIndex:0];
        [segmentedControl setWidth:20 forSegmentAtIndex:1];
        segmentedControl.momentary = NO;
        [segmentedControl setSelectedSegmentIndex:0];

        self.navigationItem.titleView = segmentedControl;
...