2014-02-18 3 views
2

Я использую изображение в качестве фонового изображения на панели навигации. Для установки изображения я использовал следующий код:iOS 7 Навигационная панель проблема с фоновым изображением

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nav_logo_ios7.png"] forBarMetrics:UIBarMetricsDefault]; 

Для iOS7 «nav_logo_ios7.png» размер изображения 768x64 и iOS6 и сильфонные я использовал изображение имеет размер 768x44.

Это хорошо работает на всех UIViewControllers.

enter image description here

В этом проекте я использую UIActivityViewController. На iOS7 зрения почта создания письма выглядеть следующим образом:

enter image description here

Как я могу справиться с этим?

Заранее спасибо.

+0

если ([[[UIDevice CurrentDevice] SystemVersion] floatValue]> = 7,0) { // загрузить ИОС 7 изображений } еще { // загрузки IOS 6 изображений } - вам нужно загрузить изображения в соответствии с приведенным выше кодом –

+0

@bhavyakothari thats то, что я делаю. – OMK

ответ

2

вопрос вы столкнулись в том, что, когда 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.

+0

Поблагодарите u soo много для этого решения. – OMK

0
//In `AppDelegate.m` 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0) 
    { 
     [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nav_bg.png"] forBarMetrics:UIBarMetricsDefault]; 


     [[UINavigationBar appearance] setTitleTextAttributes: 
     @{ 
      UITextAttributeTextColor: [UIColor whiteColor],UITextAttributeTextShadowColor: [UIColor clearColor],UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)],UITextAttributeFont: [UIFont fontWithName:@"ArialMT" size:18.0f] 
     }]; 


     CGFloat verticalOffset = -4; 
     [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:verticalOffset forBarMetrics:UIBarMetricsDefault]; 
    } 
    else 
    { 
     [[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]]; 

     // Uncomment to change the color of back button 
     [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; 

     // Uncomment to assign a custom backgroung image 
     [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nav_bg_ios7.png"] forBarMetrics:UIBarMetricsDefault]; 

     // Uncomment to change the back indicator image 

     [[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@""]]; 
     [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@""]]; 

     // Uncomment to change the font style of the title 

     NSShadow *shadow = [[NSShadow alloc] init]; 
     shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8]; 
     shadow.shadowOffset = CGSizeMake(0, 1); 

     [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,shadow, NSShadowAttributeName,[UIFont fontWithName:@"ArialMT" size:18.0], NSFontAttributeName, nil]]; 

     CGFloat verticalOffset = -4; 
     [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:verticalOffset forBarMetrics:UIBarMetricsDefault]; 
    } 

self.window.rootViewController = self.navigationController; 

    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

Не работает. – OMK

Смежные вопросы