Настройка шрифта UINavigationBar

Я пытаюсь настроить свой шрифт UINavigationBar, используя следующий код для iOS 5 в моем делегате приложения application:didFinishLaunchingWithOptions:

if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) 
{
    [[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                                                          [UIColor whiteColor], UITextAttributeTextColor,
                                                          [UIColor blackColor], UITextAttributeTextShadowColor,
                                                          [NSValue valueWithUIOffset:UIOffsetMake(1, 0)], UITextAttributeTextShadowOffset,
                                                          [UIFont fontWithName:kDefaultFont size:0.0], UITextAttributeFont, 
                                                          nil]];
}

. Он работает нормально, и панель навигации отображается с использованием моего шрифта. Здорово.

Ссылки , которые я нашел, предполагают, что вы можете использовать нулевой размер шрифта, и он изменит размер шрифта, чтобы он соответствовал вашей панели навигации (используя немного меньший шрифт для более короткой панели навигации для ландшафтная планировка). И он выбирает размер шрифта, который хорошо соответствует высоте панели навигации. Но похоже, что если вы переходите от портретной ориентации к альбомной и обратно, ширина метки заголовка панели навигации искажается, поэтому то, что отображается как заголовок, например, «Длинная панель заголовка», выглядит нормально при первом просмотре. в портретной ориентации выглядит нормально, когда вы просматриваете его в альбомной (с соответствующим меньшим шрифтом), но когда я возвращаюсь к портретной ориентации, шрифт правильно возвращается к более крупному шрифту, но сам текст заголовка обрезается, становясь "Длинный...", хотя места для полного названия предостаточно. Кто-нибудь еще видел такое поведение при использовании размера шрифта 0,0?

Ясно, что я могу просто указать фактический размер шрифта (, и в этом случае я не вижу этого поведения усечения), но тогда я вручную выясняю, какой размер использовать. И что еще хуже, размер шрифта одинаков для альбомной и книжной ориентации, поэтому сейчас я использую размер шрифта, который подходит для более короткого заголовка горизонтальной панели навигации, а заголовок меньше, чем должен быть в более высокой вертикальной панели навигации.

Кто-нибудь имел опыт использования setTitleTextAttributesдля изменения шрифта [UINavigationBar appearance]таким образом, чтобы размер шрифта менялся между книжной и альбомной,но не иметь этого усечения заголовка, когда вы возвращаетесь обратно в портретную ориентацию после перехода в альбомную? Я собираюсь использовать различные хитрые обходные пути, но если у вас есть опыт решения этой проблемы, дайте мне знать.

Обновление:

В процессе отправки этой ошибки в Apple я решил продемонстрировать, как воспроизвести проблему:

  1. Создать новое главное приложение iOS-Detail в Xcode 4.3.2.

  2. Поместите приведенный выше setTitleTextAttributesкод в делегат приложения application:didFinishLaunchingWithOptions(. Я использовал шрифт @"GillSans").

  3. Перейдите в MasterViewController и добавьте строку с текстомself.title = @"Long Title";

  4. Закомментируйте код UIBarButtonItem *addButton.

  5. Запустите программу. Обратите внимание, что в названии правильно указано «Длинное название». Повернуть в альбомную. Все еще хорошо выглядит. Поверните обратно в книжную ориентацию, и в заголовке теперь будет написано «Длинное...», хотя места достаточно.

  6. Любопытно, что если восстановить код UIBarButtonItem *addButton, заголовок работает как надо. Но если вы либо удалите элемент UIBarButton, либо замените его кнопкой, которая использует initWithTitleвместо initWithBarButtonSystemItem, вы получите проблему с заголовком панели навигации после поворота из портретной в альбомную, а затем обратно в портретную.

22
задан Andrew Barber 12 July 2013 в 05:56
поделиться