Я хочу, чтобы мой 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. Итак, любые идеи, что я буду делать отсюда?/Привет
Извините за поздний ответ, но я не работал :( – user1293618