0

Я собираю приложение, в котором некоторые из видов находятся в обычных UIViewControllers и используют свой собственный UINavigationBar, тогда как другие будут частью иерархии навигации внутри UINavigationController и используют его UINavigationBar вместо ,Навигационная панель в UINavigationController слишком короткая

Проблема в том, что фактические UINavigationBars, которые я вижу, различны в этих двух случаях. Те, которые используют навигационную панель UINavigationController, выглядят неестественно короткими. Вот несколько фотографий, показывающих, что я вижу в Interface Builder, и то, что я вижу во время выполнения.

A view in a regular view controller, which has its own navigation bar A UINavigationController + content view controller setup The first view in the simulator The second view in the simulator -- note the way-too-short navigation bar!

Я не могу понять, что я делаю неправильно здесь. Почему навигационная панель отличается высотой? Как я могу сделать их одинаковыми?

+0

Я не понимаю вопроса. Похоже, я смотрю на панель навигации против uitoolbar на некоторых изображениях. –

+0

Сэм, здесь нет объектов UIToolbar. Экран «Рецензии» представлен как модальный диалог, поэтому я хотел, чтобы строка заголовка и кнопка были уволены, поэтому я использовал UINavigationBar прямо в представлении. Кнопка «Готово» - это UIBarButtonItem. На экране «Меню» у меня есть иерархия экранов для представления, поэтому я создаю UINavigationController, который, конечно же, имеет свой собственный встроенный UINavigationBar. Итак, вкратце, для меня самый ванильный способ использования UINavigationController, панель навигации слишком короткая. –

+0

@SamBudda (Забыл упомянуть ваше имя пользователя в последнем посте, и уже слишком поздно редактировать.) –

ответ

0

Разобрался, что происходит здесь. UINavigationController автоматически изменяет размер навигационной панели в портретной ориентации, и, насколько я могу судить, нет встроенного способа предотвратить это. Однако с помощью этого сообщения (How to prevent autoresizing UINavigationBar on Landscape) я смог заставить его работать так, как я хотел. Мой код немного отличался от кода в связанном сообщении. Я использовал:

@implementation UINavigationBar (CustomHeight) 

- (CGSize)sizeThatFits:(CGSize)size 
{ 
    // Need to know the width of the window 
    CGRect bounds = self.window.bounds; 

    // Sometimes height and width are turned around. Take the largest of height and width as the real width. 
    int width = (bounds.size.width > bounds.size.height) ? bounds.size.width : bounds.size.height; 

    // Make sure that the 
    CGSize newSize = CGSizeMake(width, 44); 
    return newSize; 
} 

Я не уверен, если есть лучший способ, чтобы получить истинную ширину - выше неуклюжая, но работаю для меня, так как мое приложение работает только в ландшафтном. Моя большая забота заключается в том, что Apple говорит в своей документации UINavigationBar, что вы не должны напрямую настраивать фрейм. Но я думаю, что я не делаю этого прямо; предположительно внутренние методы рисования вызовут этот метод и сделают свое дело.

В любом случае, это работает для меня. Надеюсь, это поможет кому-то другому.

+0

Вы не должны настраивать высоту навигационной панели. Это стандартное поведение iOS для регулировки его высоты в широкоэкранном режиме. (Это намеренно 44 точки в портрете и меньше в пейзаже.) Почему вы хотите это сделать? – nielsbot

+0

просто проверьте приложение Apple, чтобы узнать, о чем я говорю.Если вы настраиваете навигационную панель, вы должны предоставить менее высокую версию для широкого экрана. – nielsbot

+0

Спасибо за ответ, @nielsbot. Я определенно борюсь с идеей о том, что нельзя пытаться манипулировать представленными OS-виджетами над тем, для чего они предназначены. В этом конкретном случае это в основном обеспечить единый опыт. У меня есть два других экрана, которые концептуально являются братьями и сестрами того, который я пытаюсь изменить, и они используют UINavigationBar, который не представлен в UINavigationController. OS показывает их с высоким (44 pt) размером. Так что выглядит немного забавно, чтобы иметь два экрана с высоким баром и один с коротким. –

2

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

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/UIElementGuidelines/UIElementGuidelines.html#//apple_ref/doc/uid/TP40006556-CH13-SW41

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

http://www.idev101.com/code/User_Interface/sizes.html

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