Высота UIToolbar при вращении устройства - PullRequest
15 голосов
/ 07 марта 2011

Из Руководства по интерфейсу пользователя iOS, Руководство по использованию элемента пользовательского интерфейса iOS

На iPhone учитывайте автоматическое изменение высоты панели инструментов что происходит при вращении устройства . В в частности, убедитесь, что ваш заказ значки на панели инструментов хорошо вписываются в более тонкий бар, который появляется в ландшафте ориентации. Не указывайте высоту панели инструментов программно.

Я вижу изменение высоты с 44 до 32 точек в Mail , Twitter для iPhone и Dropbox , например, но когда я добавляю панель инструментов (с Interface Builder) и мой подкласс UIViewController автоматически вращается (shouldAutorotateToInterfaceOrientation: возвращает YES), панель инструментов не меняет свою высоту автоматически при повороте устройства.

Справочник по классам UIToolbar не упоминает об этом автоматическом изменении высоты, поэтому я должен изменить его программно, даже если HIG говорит Не указывайте высоту панели инструментов программно

Ответы [ 4 ]

19 голосов
/ 07 марта 2011

Вы проверяли свойство автоматического изменения размера панели инструментов?

15 голосов
/ 24 августа 2012

Как отметили Йонель и Джордж в комментариях к ответу 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: методы.

Высота, тем не менее, изменяется программно, но, по крайней мере, значение не кодируется жестко.

12 голосов
/ 19 декабря 2014

Этого поведения намного проще достичь с помощью автоматического макета. Я тестировал только в iOS8, но у меня работает следующий код с желаемой анимацией при изменении ориентации:

public override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    toolbar.invalidateIntrinsicContentSize()
}
2 голосов
/ 24 августа 2012

Если вы используете ViewController внутри NavigationController, вы можете использовать панель инструментов NavigationController вместо того, чтобы создавать свою собственную, и позволить ей обрабатывать изменение размера.Вот для чего собственно свойство toolbarItems ViewController.

...