Где вы устанавливаете размер кнопки UISegmentedControl? - PullRequest
1 голос
/ 31 марта 2012

У меня есть собственный подкласс UISegmentedControl. Это кнопки больше стандартного размера. Каждая кнопка имеет ширину 100.0 пунктов.

@implementation SegmentedControlExplore

- (id) init
{
    return [super  
        initWithItems:[NSArray arrayWithObjects:
            @"Uno", 
            @"Dos", 
            nil
        ]
    ];
}

- (void) layoutSubviews
{
    for (NSUInteger i = 0; i < self.numberOfSegments; i++) {
        [self setWidth:100.0 forSegmentAtIndex:i];
    }
    [super layoutSubviews];
}

@end

Когда я пытаюсь использовать это в моем контроллере, я не могу центрировать его в UINavigationBar.

SegmentedControl* sc = [[[SegmentedControl alloc] init] autorelease];
[self.navigationController.navigationBar addSubview:sc];
sc.center = self.navigationController.navigationBar.center;

Смещено вправо. Причина в том, что настройка размера кнопки фактически вызывается после изменения ее свойства center. Так куда мне перенести настройку размера кнопки, чтобы она была сделана первой? Я попытался переместить его в init, но размер не изменился.

1 Ответ

0 голосов
/ 03 апреля 2012

Замените вашу функцию layoutSubviews на этот код.

- (void) layoutSubviews {

    self.frame = CGRectMake(0, 0, self.numberOfSegments*100, 44);
    self.center = self.superview.center;

    CGRect frame = self.frame;

    if (![[UIApplication sharedApplication] isStatusBarHidden]) {
        self.frame = CGRectMake(frame.origin.x, frame.origin.y-20, frame.size.width, frame.size.height);
    }

    for (NSUInteger i = 0; i < self.numberOfSegments; i++) {
        [self setWidth:100 forSegmentAtIndex:i];
    }

    [super layoutSubviews];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...