вопрос вы столкнулись в том, что, когда UIViewController представлена модально, строка состояния не входит в высоту UINavigationBar.
Это значит, что 64-разрядное изображение неверное.
Прежде всего, официального и лучший способ проверить, какую версию прошивки устройство работает под управлением будет делать что-то вроде этого:
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
{
//handle iOS 7 Stuff
}
else
{
//handle older iOS versions
}
Для получения дополнительной информации, проверьте заголовок NSObjCRuntime.h
.
UINavigationBar фоновые изображения не должны быть изображениями фиксированного размера, а должны быть растяжимыми изображениями, такими как повторяемый рисунок, поэтому, возможно, это была бы идея переосмыслить будущие проекты ... Однако, если вы хотите продолжить пользовательский фиксированный размер изображения, то у меня есть предложение для вас ...
UINavigationController позволяет инициализировать экземпляр с пользовательскими классами UINavigationBar и UIToolbar с использованием initWithNavigationBarClass:toolbarClass:
... Это означает, что вы можете инициализировать любые представления, которые вы не представляете модально с другим подклассом UINavigationBar к представлениям, которые представлены модально.
Это означает, что вы будете иметь возможность задавать различные фоновые изображения в зависимости от того, если ваш навигационный контроллер модально представлен или нет, например:
UIImage *backgroundImage44pts = [UIImage imageNamed:@" ... "];
UIImage *backgroundImage64pts = [UIImage imageNamed:@" ... "];
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
{
//handle iOS 7 Stuff
[[UINavigationBar appearance] setBackgroundImage:backgroundImage44pts forBarMetrics:UIBarMetricsDefault];
[[UINavigationBarSubclass appearance] setBackgroundImage:backgroundImage64pts forBarMetrics:UIBarMetricsDefault];
}
else
{
//handle older iOS versions
[[UINavigationBar appearance] setBackgroundImage:backgroundImage44pts forBarMetrics:UIBarMetricsDefault];
}
Одна важная вещь, чтобы отметить, что MFMailComposeViewController не a real view controller, поэтому попытка инициализировать его с помощью настраиваемых подклассов панели навигации может не сработать. Вот почему я использовал подклассу настраиваемой панели навигации для всех немодальных навигационных контроллеров, а не наоборот.
Другое дело, что если ваше приложение универсально, то модальные представления не существуют (если у вас нет ничего пользовательского), и вам не придется беспокоиться об этом.
Как я уже говорил ранее ...UINavigationBars на самом деле не предназначены для фиксированных фоновых изображений (поэтому их так сложно достичь), поэтому, если вы считаете, что эта работа слишком сложная, возможно, было бы хорошей идеей переосмыслить ваш дизайн.
И последнее, что я обещаю ... Одним из основных изменений дизайна в iOS 7 является то, что ваш контент находится на панели навигации, текущей под строкой состояния. Добавление изображения для предотвращения этого и его замены твердый белый фон кажется довольно странным для приложения iOS 7.
если ([[[UIDevice CurrentDevice] SystemVersion] floatValue]> = 7,0) { // загрузить ИОС 7 изображений } еще { // загрузки IOS 6 изображений } - вам нужно загрузить изображения в соответствии с приведенным выше кодом –
@bhavyakothari thats то, что я делаю. – OMK