2010-07-11 41 views
8

http://www.irovr.com/stackOverflow/overlap.pngtại sao thanh điều hướng của tôi ở dưới thanh trạng thái của tôi?

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     [self setWantsFullScreenLayout:YES]; 
     [mainScrollView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onMainScrollTap:)]]; 
    } 

- (void)onMainScrollTap:(id)sender { 
    if(self.navigationController.navigationBar.hidden){ 
     [self.navigationController setNavigationBarHidden:NO animated:YES]; 
     [self.navigationController setToolbarHidden:NO animated:NO]; 
     [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; 
    }else{ 
     [self.navigationController setNavigationBarHidden:YES animated:YES]; 
     [self.navigationController setToolbarHidden:YES animated:YES]; 
     [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
    } 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 

    self.navigationController.navigationBar.translucent = YES; 
    self.navigationController.toolbar.translucent = YES; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self.navigationController setNavigationBarHidden:YES animated:YES]; 
    [self.navigationController setToolbarHidden:YES animated:YES]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; 
    self.navigationController.navigationBar.translucent = NO; 
    self.navigationController.toolbar.translucent = NO; 
    [self.navigationController setNavigationBarHidden:NO animated:YES]; 
    [self.navigationController setToolbarHidden:YES animated:NO]; 
} 

Trả lời

11

Dường như việc ẩn thanh trạng thái và thanh điều hướng cùng lúc gây ra sự cố này. Tôi đã có thể giải quyết nó bằng cách ẩn/hiển thị thanh điều hướng với performSelector:withObject:afterDelay, ngay cả với độ trễ 0

+8

Điều này cũng phù hợp với tôi. Tôi đã có thể làm cho nó "tái khung" bằng cách đặt 'navigationBarHidden' thành YES và sau đó NO ngay lập tức. –

0

xem của bạn được đặt quá lớn, do đó nó nhận được vẽ bên dưới thanh trạng thái. Nếu bạn đang sử dụng Trình tạo giao diện để tạo nó dưới dạng .xib, bạn cần bật cài đặt cho thanh trạng thái trong "Yếu tố giao diện mô phỏng" hoặc chỉ giảm chiều cao của chế độ xem theo cách thủ công.

+0

Không phải vậy. Chế độ xem của tôi có kích thước phù hợp. Có lẽ tôi nên nói rằng điều này chỉ xảy ra khi tôi đã ẩn trạng thái và thanh điều hướng và hiển thị lại chúng. Chế độ xem có nghĩa là để chuyển đổi giữa toàn màn hình và không, giống như ứng dụng ảnh. –

5

Sử dụng "performSelector" sẽ hoạt động.

Tuy nhiên, một số có thể tìm thấy dễ dàng hơn để thêm thông tin sau vào "viewWillDisappear" ngay cả khi đã có tuyên bố hiện ra thanh điều hướng.

[self.navigationController setNavigationBarHidden:YES animated:NO]; 
[self.navigationController setNavigationBarHidden:NO animated:NO]; 
0
- (void)fixNavigationBarUnderStatusbarBug 
{ 
   //This method fix bug! Don't cut it 
   //Bug: Statusbar hide navigationBar after device rotation. 
   if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
       NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 
       NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; 
       [center addObserverForName:UIDeviceOrientationDidChangeNotification object:nil 
                            queue:mainQueue usingBlock:^(NSNotification *note) { 
                                UIApplication *currentApplication = [UIApplication sharedApplication]; 
                                if (currentApplication.statusBarHidden) { 
                                    [currentApplication setStatusBarHidden:NO]; 
                                    double delayInSeconds = .1; 
                                    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
                                    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
                                        [currentApplication setStatusBarHidden:YES]; 
                                    }); 
                                } 
                            }]; 
   } 
} 
Các vấn đề liên quan