UISegmentedControl в UINavigationController UIToolbar неправильно изменяет размер - PullRequest
0 голосов
/ 11 февраля 2012

Я программно добавляю UISegmentedControl на панель инструментов UINavigationController (я нахожусь в UITableViewController).Я хочу, чтобы сегментированный элемент управления выглядел прилично, не заполняя весь бар.Кроме того, я хочу, чтобы он вращался вместе с видом и изменял размеры.Это должно быть довольно легко, но я думаю, что что-то упустил.Я действительно заставил его работать, но это не чистый код, поэтому я надеюсь, что кто-нибудь подскажет мне, какие настройки / методы использовать для «правильной» реализации.

Getter:

- (UISegmentedControl*)stockFilterSegmentedControl {
if (!_stockFilterSegmentedControl) {
    _stockFilterSegmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"All",@"Holdings", nil]];
    [_stockFilterSegmentedControl addTarget:self action:@selector(stockFilterControlPressed:) forControlEvents:UIControlEventValueChanged];
    _stockFilterSegmentedControl.selectedSegmentIndex = 0;
    _stockFilterSegmentedControl.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    CGRect newFrame = _stockFilterSegmentedControl.frame;
    newFrame.size.height = self.navigationController.toolbar.frame.size.height * .8;
    _stockFilterSegmentedControl.frame = newFrame;
}

return _stockFilterSegmentedControl;
}

Где мы его вставляем:

- (NSArray*)navFooterToolbarArray {
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.stockFilterSegmentedControl];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *refresh = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh:)];
return [NSArray arrayWithObjects:flexibleSpace, barButtonItem, flexibleSpace, refresh, nil];    
}

- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Stocks";
self.toolbarItems = [self navFooterToolbarArray];
}

И чтобы это работало, мне пришлось добавить:

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
NSLog(@"Did autorotate.");
CGRect newFrame = self.stockFilterSegmentedControl.frame;
newFrame.size.height = self.navigationController.toolbar.frame.size.height * .8;
self.stockFilterSegmentedControl.frame = newFrame;
}

Как правильно это сделать?

Спасибо,

Дэмиен

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Ответ на самом деле очень прост - вы устанавливаете segmentedControlStyle на сегментированном элементе управления в UISegmentedControlStyleBar, и он будет идеально изменять размеры без какой-либо драмы. Маски авторазмера работают как положено.

Спасибо

Дэмиен

1 голос
/ 11 февраля 2012

Все, что вам действительно нужно, это что-то вроде:

_stockFilterSegmentedControl.frame = CGRectInset(self.navigationController.toolbar.bounds, 5, 5); //set to toolbar rect inset by 5 pixels
_stockFilterSegmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Тогда вам не нужно будет ничего делать при вращении представления, оно просто должно автоматически изменить размер, чтобы соответствовать из-за autoresizingMask.

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