2013-11-12 3 views
0

В моем текущем проекте у меня есть приложение, основанное на контроллере навигации. Для некоторых видов в приложении требуется панель инструментов в нижней части представления. Я создаю панель инструментов программно с помощью следующих (Выдержки из viewDidLoad в контроллере представления таблицы):Странное поведение с UIToolbar в приложении iOS

UIBarButtonItem *reloadButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshList)]; 

[reloadButton setTitle:@"Refresh"]; 
[reloadButton setTintColor:[UIColor whiteColor]]; 

self.navigationController.toolbar.barStyle = UIBarStyleBlackTranslucent; 
[self.navigationController.toolbar sizeToFit]; 
CGFloat toolbarHeight = [self.navigationController.toolbar frame].size.height; 
[self.navigationController.toolbar setFrame:CGRectMake(CGRectGetMinX(self.view.bounds), 
                 438, 
                 CGRectGetWidth(self.view.bounds), 
                 toolbarHeight)]; 
NSArray *toolbarItems = [[NSArray alloc] initWithObjects:reloadButton, nil]; 
[self setToolbarItems:toolbarItems]; 
[self.navigationController setToolbarHidden:NO]; 

Это хорошо работает в большинстве взглядов. Однако теперь я включаю его в другое представление, используя идентичный код. В этом контроллере панель инструментов отображается примерно на дюйм выше дна представления - она ​​не привязывается к нижней части представления, как в других диспетчерах представления. Когда я перейду к представлению проблемы, другие панели инструментов в другом представлении начнут проявлять одинаковое поведение. Это происходит только в симуляторе, а не на моем физическом устройстве. Однако в настоящее время у меня есть только iPhone 4 в качестве моего физического устройства. Это ошибка в симуляторе или указание проблемы где-то? Благодаря!

+0

Может быть, этот конкретный контроллер просмотра скрывает строку состояния? – Macondo2Seattle

ответ

1

Вы устанавливаете позицию y на твердое значение 438. Это приведет к тому, что она не появится в нижней части экрана для более высоких iPhone 5). Вы должны вычислить положение у, а также, возможно, с:

CGRectGetMaxY(self.view.bounds) - toolbarHeight 

это приведет:

[self.navigationController.toolbar setFrame:CGRectMake(CGRectGetMinX(self.view.bounds), 
                CGRectGetMaxY(self.view.bounds) - toolbarHeight, 
                CGRectGetWidth(self.view.bounds), 
                toolbarHeight)]; 

Это может также иметь дело с наличием навигационной панели и в строке состояния

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