пользовательская панель UINavigation в iOS5 - PullRequest
2 голосов
/ 18 октября 2011

У меня проблемы после обновления до Xcode 4.2.Раньше я использовал следующие коды для создания пользовательской панели навигации, но когда я использую симулятор iPhone 5.0, он не работает, тогда как в симуляторе iPhone 4.2 все было в порядке.

Могу ли я знать, в чем проблема и как я могу это исправить?

Большое спасибо

@implementation UINavigationBar (UINavigationBarCustomDraw)
- (void) drawRect:(CGRect)rect {

   [self setTintColor:[UIColor colorWithRed:0.4f
                                    green: 0.0f
                                     blue:0.4f 
                                    alpha:1]];

   if ([self.topItem.title length] > 0 && ![self.topItem.title isEqualToString:@""]) 
   {
        [[UIImage imageNamed:@"purple.jpg"] drawInRect:rect];   
   }
}

@end

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

Не делай этого, как Джохас. Это использует внутренние детали класса, которые могут измениться с обновлением iOS. Используйте API внешнего вида на iOS 5.

Ищите здесь что-то, что работает как с iOS 5, так и с iOS 4, Пользовательский фон UINavigationBar

2 голосов
/ 12 ноября 2011

Если вам нужна пользовательская UINavigationbar с некоторым изображением, поэтому вам нужно поместить этот код в rootViewController, который является первым представлением стека навигации (A> B> C, поэтому вы должны поместить его в A)

- (void)viewDidLoad
{
  [super viewDidLoad];

  [[UIDevice currentDevice] systemVersion];

  if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) {

      //iOS 5
      UIImage *toolBarIMG = [UIImage imageNamed: @"purple.jpg"];  

      if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
         [[UINavigationBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault]; 
      }

      } else {

      //iOS 4
      [self.navigationController.navigationBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"purple.jpg"]] autorelease] atIndex:0];  
       }
   }
} 
...