1

Я хочу, чтобы мой UINavigationBar правильно вращался внутри моего SignatureViewController. В настоящее время это выглядит так, как это выглядит в Portrait vs Landscapemode при вращении: http://tinypic.com/view.php?pic=2w5573a&s=5#.Uk5kgYapWrgИзменение фона UINavigationBar в зависимости от пейзажа/портрета?

Как вы можете видеть, UINavigationBar не масштабируется по ширине, когда в ландшафте. Мой проект построен следующим образом:

RootViewController (UINavgationController) ------ Модальные нажмите ----->SignatureViewController

(portrait only)         (portrait/landscape) 

Обратите внимание, что я не используя обычный push to SignatureViewController, я использую модальный. На всякий случай я хочу упомянуть об этом, потому что я не уверен, может ли он повлиять на результат каким-либо странным образом? ... Я пробовал разные подходы к изменению фона NavigationBar в зависимости от того, находится ли он в ландшафте или в портрете. Я буду размещать некоторые здесь ниже:

попытки nr1: Не работает

- (void) viewWillAppear:(BOOL)animated { 

[[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"bar_nav_black.png"] forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"navbar25g.png"] forBarMetrics:UIBarMetricsLandscapePhone]; 

[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
} 

попытка nr2: Не работает

- (void) viewWillAppear:(BOOL)animated { 

UIImage *navBarLandscape = [[UIImage imageNamed:@"navbar25g.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(x,x,x,x)]; 

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

[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 

} 

попытка nr3: Не работает

- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification 
{ 

UIView *v = [[UIView alloc]init]; 

int a = [[notification.userInfo objectForKey: UIApplicationStatusBarOrientationUserInfoKey] intValue]; 
int w = [[UIScreen mainScreen] bounds].size.width; 
int h = [[UIScreen mainScreen] bounds].size.height; 
switch(a){ 
    case 4: 
     v.frame = CGRectMake(0,20,w,h); 
     [[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"bar_nav_black.png"] forBarMetrics:UIBarMetricsDefault];//Have also tried with UIBarMetricsLandscapePhone... 
     NSLog(@"willrotate:1"); 

     break; 
    case 3: 
     v.frame = CGRectMake(-20,0,w-20,h+20); 
     [[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"navbar25g.png"] forBarMetrics:UIBarMetricsDefault];//Have also tried with UIBarMetricsLandscapePhone... 
     NSLog(@"willrotate:2"); 
     [self.view addSubview:v]; 
     break; 
    case 2: 
     v.frame = CGRectMake(0,-20,w,h); 
     [[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"bar_nav_black.png"] forBarMetrics:UIBarMetricsDefault];//Have also tried with UIBarMetricsLandscapePhone... 
     NSLog(@"willrotate:3"); 

     break; 
    case 1: 
     v.frame = CGRectMake(20,0,w-20,h+20); 
     NSLog(@"willrotate:4"); 
     [[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"navbar25g.png"] forBarMetrics:UIBarMetricsDefault];//Have also tried with UIBarMetricsLandscapePhone... 


} 

Обратите внимание, что в попробуйте nr3 NSLog работает, но он не хочет менять фон UINavigationBar. Итак, любые идеи, что я буду делать отсюда?/Привет

ответ

0

пожалуйста, вы можете попытаться реализовать UINavigationBar класс и переопределить один drawRect: метода

он должен работать

@implementation UINavigationBar (BackgroundImage) 

- (void)drawRect:(CGRect)rect 
{ 
    UIImage *navimage; 
    //we will check if screen width is 320 then it will be potrait 
    if(self.frame.size.width == 320) 
    { 
     navimage = [UIImage imageNamed: @"Your Potrait nav bar image"]; 
    } 
    else 
    { 
     navimage = [UIImage imageNamed: @"Your Landscape nav bar image"]; 
    } 

    [navimage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 

@end 

Надеется, что это помогает ...

и просто попробовать это для nr1 и nr2

просто измените последнюю строку кода на это .. при ее работе или нет ... дайте мне знать

self.navigationController.navigationBar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; //UIViewAutoresizingFlexibleWidth 
+0

Извините за поздний ответ, но я не работал :( – user1293618

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