Высота 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.