Внешний вид панели навигации UIPopoverController

Я использую этот код для настройки изображения панели навигации во всем приложении.

UIImage *navBarTexture = [[UIImage imageNamed:@"NavBarTexture_iPad"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    [[UINavigationBar appearance] setBackgroundImage:navBarTexture forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setBackgroundImage:navBarTexture forBarMetrics:UIBarMetricsLandscapePhone];

Это творит чудеса. Однако при использовании этого изображения на панели навигации в UIPopoverControllers это выглядит немного странно. Изображение Apple по умолчанию для него — это то, что я хочу использовать, как я могу сохранить этот первоначальный вид?

Я знаю, что могу использовать appearanceWhenContainedIn:, однако, если я верну nil в качестве изображения, я просто получу черное пространство.


person Josh Kahane    schedule 15.09.2012    source источник


Ответы (1)


Первое, что пришло мне в голову, это просто получить изображение по умолчанию с панели навигации перед настройкой. Я был в шоке, что это сработало.

UINavigationBar *appearanceProxBar = [UINavigationBar appearance];
UIImage *defaultImage = [appearanceProxBar backgroundImageForBarMetrics:UIBarMetricsDefault];
[appearanceProxBar setBackgroundImage:navBarTexture forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearanceWhenContainedIn:[UIPopoverController class], nil] setBackgroundImage:defaultImage forBarMetrics:UIBarMetricsDefault];

Кроме того, как вы можете видеть в ответе, в WWDC 2012 - 216 - Advanced Appearance Customization на iOS был изящный прием приведения прокси внешнего вида к экземпляру соответствующего класса, чтобы компилятор мог предупредить о нераспознанных селекторах, а также завершение кода является более точным.

person NJones    schedule 15.09.2012
comment
Это не работает для класса MFMailComposeViewController в iOS 6. Есть идеи, почему? - person rowwingman; 25.01.2013
comment
@rowwingman Это не работает, потому что MFMailComposeViewController отображается в совершенно другом процессе. - person Leo Natan; 27.10.2013