Я пытаюсь настроить свой шрифт 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]];
}
Он отлично работает, и панель навигации отображается с помощью моего шрифта. Отлично.
ссылки. Я нашел, что вы можете использовать размер шрифта равным нулю, и он изменит размер шрифта в соответствии с вашей навигационной панелью (используя немного меньший шрифт для более короткой панели навигации для ландшафтного макета). И он выбирает размер шрифта, который прекрасно подходит к высоте панели навигации. Но похоже, что если вы переходите от портрета к пейзажу и обратно, ширина ярлыка заголовка навигационной панели закручивается, поэтому то, что отображается как заголовок, например, "Long Titlebar", отлично выглядит при первом просмотре в портретной ориентации выглядит отлично, когда вы просматриваете его в ландшафте (с соответствующим меньшим шрифтом), но когда я возвращаюсь к портрету, шрифт правильно возвращается к более крупному шрифту, но сам текст заголовка усекается, становясь "Long..." хотя есть достаточно места для полного титула. Кто-нибудь еще видел это поведение при использовании размера шрифта 0.0?
Ясно, что я могу просто указать фактический размер шрифта (в этом случае я не вижу этого усекающего поведения), но потом я вручную выясню, какой размер использовать. И что еще хуже, размер шрифта одинаковый для пейзажа и портрета, поэтому прямо сейчас я использую размер шрифта, который подходит для более короткого заголовка ландшафтной навигации, а название меньше, чем должно быть в верхней панели навигации на портрете.
У кого-нибудь есть опыт использования setTitleTextAttributes
для изменения шрифта [UINavigationBar appearance]
таким образом, чтобы размер шрифта изменялся между портретом и ландшафтом, но не имел этого усечения заголовка, когда вы возвращаетесь обратно портрет после перехода в пейзаж? Я собираюсь заниматься различными обходными решениями, но если у вас есть какой-либо опыт в этой проблеме, сообщите мне.
Update:
В процессе отправки этой ошибки Apple я решил продемонстрировать, как воспроизвести проблему:
-
Создайте новое приложение Master-Detail iOS в Xcode 4.3.2.
-
Поместите вышеуказанный код
setTitleTextAttributes
в делегат приложенияapplication:didFinishLaunchingWithOptions
(я использовал шрифт @ "GillSans" ). -
Перейдите в MasterViewController и добавьте строку, которая говорит
self.title = @"Long Title";
-
Прокомментируйте код
UIBarButtonItem *addButton
. -
Запустите программу. Обратите внимание, что заголовок правильно говорит "Long Title". Поворот к пейзажу. Все еще выглядит хорошо. Повернитесь назад к портрету, и название теперь говорит "Long...", хотя там много места.
-
Любопытно, что если вы восстановите код
UIBarButtonItem *addButton
, заголовок будет работать так, как должен. Но если вы либо исключите элемент UIBarButton, либо замените его кнопкой, которая используетinitWithTitle
, а неinitWithBarButtonSystemItem
, вы получите проблему с заголовком панели навигации после поворота от портрета к пейзажу, а затем назад к портрету.