Если вы использовали подклассы UINavigationBar
, вы должны просто использовать правильный класс панели навигации на каждой платформе. Другими словами, проверка идиом интерфейса должна повлиять на создание панели навигации, а не на реализацию drawRect:
.
Поскольку вы используете категорию для замены реализации drawRect:
(что не следует делать), я думаю, что ваш единственный выбор - динамический метод Swizzling. То есть вы заменяете drawRect:
только на iPhone / iPod Touch.
Рассмотрим подклассы UINavigationBar
, так как это проще, безопаснее и чище. Это поможет вам избежать головной боли от совместимости.
РЕДАКТИРОВАТЬ: для примера предположим, что у вас есть файл пера, содержащий только пустой контроллер навигации с пользовательским подклассом UINavigationBar
. Для этого выберите панель навигации в редакторе xib и измените ее класс в инспекторе.
UINavigationController *navigationController = nil;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
navigationController = [[UINavigationController alloc] init];
else {
UINib *nib = [UINib nibWithNibName: @"MyNavigationController" bundle: nil];
navigationController = [[[nib instantiateWithOwner: nil options: nil] objectAtIndex: 0] retain];
}
При запуске на iPhone или iPod Touch этот код создает контроллер навигации из файла пера.