2013-10-09 1 views
0

Я пытаюсь создать собственный внешний вид моего UINavigationBar. Когда пользователь помещает приложение в ландшафт, навигационная панель должна быть покрыта изображением. При повороте назад к портрету я хочу, чтобы View (Image) был удален. Все работает отлично с кодом ниже, кроме как удалить его. Я могу удалить View, если я поместил код в один и тот же оператор if, но ничего не произойдет, если я поместил его в else if-statement. Я что-то пропустил?/Отношения, добавляя subView в UINavigationBar и удаляя его

- (void) adjustViewsForOrientation:(UIInterfaceOrientation) orientation { 

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

    if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) 
{ 

    v.frame = CGRectMake(0,0,480,44); 
    v.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"navbar25g.png"]]; 
    [self.view addSubview:v]; 
    //[v removeFromSuperview]; <----- works if I put it here 

    NSLog(@"LANDSCAPE");//load the landscape view 

} 
    else if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) 
{ 
      [v removeFromSuperview]; <----- Not working 


     NSLog(@"PORTRAIT"); //load the portrait view 

    } 

} 

ответ

1

причина того, что вы не можете удалить это каждый раз, когда вы идете в метод вы создаете новый экземпляр UIView * V.

Создайте переменную экземпляра, затем присвойте этому виду представление. После его назначения вы можете удалить или добавить по мере необходимости.

Если вы не хотите использовать переменную экземпляра, то вы можете дать вид на тег т.е.

UIView *v = nil; 

v = [self.view viewForTag:1000]; 

if (!v) { 
    v = [[UIView alloc] init]; 
    v.tag = 1000; 
    v.frame = CGRectMake(0, 0, 480, 44); 
    v.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"navbar25g.png"]]; 
} 

Теперь вы можете сделать ваши добавления и удаления для него.

0

Вы пробовали UIAppearance?

[[UINavigationBar appearance] setBackgroundImage:nil barMetrics:UIBarMetricsDefault]; 
    [[UINavigationBar appearance] setBackgroundImage:image barMetrics:UIBarMetricsLandscapePhone];