Высота UIToolbar при вращении устройства
В Руководстве по физическому интерфейсу iOS Руководства по использованию элементов пользовательского интерфейса iOS
На iPhone учесть автоматическое изменение высоты панели инструментов что происходит при вращении устройства. В в частности, убедитесь, что ваш пользовательский значки на панели инструментов хорошо вписываются в тоньше бар, который появляется в ландшафте ориентации. Не указывать высоту программной панели.
Я вижу, что высота меняется с 44 точек до 32 точек в Mail, Twitter для iPhone и Dropbox, например, когда я добавляю панель инструментов (с помощью Interface Builder) и автоматически подменяю подкласс UIViewController (shouldAutorotateToInterfaceOrientation:
возвращает YES), панель инструментов автоматически не изменяет свою высоту при вращении устройства.
Ссылка на класс UIToolbar не упоминает об этом автоматическом изменении высоты, поэтому я должен изменить ее программно, даже если HIG говорит, что Dont указывает высота программной панели программно?
Ответы
Ответ 1
Как отмечено yonel и Джордж в комментариях от ответа 7KV7, изменение маски авторезистирования не работает по назначению на iOS 5.
Я нашел другое решение, используя метод - [UIView sizeThatFits:]. Вот как я это сделал:
- (void) layoutForInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Adjust the toolbar height depending on the screen orientation
CGSize toolbarSize = [self.toolbar sizeThatFits:self.view.bounds.size];
self.toolbar.frame = (CGRect){CGPointMake(0.f, CGRectGetHeight(self.view.bounds) - toolbarSize.height), toolbarSize};
self.webView.frame = (CGRect){CGPointZero, CGSizeMake(CGRectGetWidth(self.view.bounds), CGRectGetMinY(self.toolbar.frame))};
}
Затем я называю этот метод layoutForInterfaceOrientation:
в моих методах управления viewWillAppear:
и willAnimateRotationToInterfaceOrientation:duration:
.
Тем не менее высота изменяется программно, но, по крайней мере, значение не является жестко запрограммированным.
Ответ 2
Вы проверяли свойство автоматического изменения размера панели инструментов?
Ответ 3
Такое поведение намного проще с автоматическим компоновкой. Я тестировал только в iOS8, но следующий код работает для меня с желаемой анимацией при изменении ориентации:
public override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
toolbar.invalidateIntrinsicContentSize()
}
Ответ 4
Если вы используете ViewController внутри NavigationController, вы можете использовать панель навигации NavigationControllers, а не создавать свои собственные, и позволить ей обрабатывать изменение размера. На самом деле это свойство ViewController toolbarItems
.