2012-04-16 30 views
10

Tôi muốn ẩn cả hai thanh khi cuộn xuống trên iPhone của mình. Khi tôi cuộn lên, chúng sẽ xuất hiện trở lại .. Làm thế nào tôi có thể xử lý điều này?Xcode/iOS: Cách ẩn Navigation- AND ToolBar khi cuộn xuống?

+1

Bạn đã cố gắng sử dụng 'setToolbarHidden: animated:' và 'setNavigationBarHidden: animated:' in 'scrollViewDidScroll:' khi giá trị x của 'contentOffset' tăng lên. – dasdom

+1

Vui lòng sử dụng tiếng Anh tại đây. Đây là một nền tảng cho mọi người từ khắp nơi trên thế giới. Khi chúng tôi bắt đầu nói chuyện bằng tiếng Đức, rất nhiều người không thể theo kịp. Khi bạn cần lời khuyên bằng tiếng Đức, hãy gửi cho tôi một email. Tôi nghĩ, để tìm địa chỉ email của tôi không khó với thông tin bạn có thể tìm thấy trong tiểu sử của mình. – dasdom

Trả lời

4

Câu trả lời được chấp nhận không phù hợp với tôi, vì scrollViewWillBeginScroll: không phải là phương thức ủy nhiệm.

Thay vào đó tôi làm

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldHide" object:self]; 

} 

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView 
       willDecelerate:(BOOL)decelerate 
{ 
    if(!decelerate) 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldUnhide" 
                  object:self]; 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldUnhide" 
                 object:self]; 
} 

Anywhere trong các đối tượng ứng dụng có thể nghe được thông báo này, như

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserverForName:@"BarsShouldHide" 
                 object:nil 
                 queue:nil 
                usingBlock:^(NSNotification *note) { 
     //hide tab bar with animation; 
    }]; 
    [[NSNotificationCenter defaultCenter] addObserverForName:@"BarsShouldUnhide" 
                 object:nil 
                 queue:nil 
                usingBlock:^(NSNotification *note) { 
     //Unhide tab bar with animation; 
    }]; 
} 

Mã này sẽ ẩn các thanh cuộn cho bất kỳ. nếu bạn muốn chỉ có trên xuống, cùng một thủ thuật locationOffset như trong câu trả lời được chấp nhận sẽ hoạt động.

7
- (void)scrollViewWillBeginScroll :(UIScrollView *)scrollView { 
     if (scrollView.contentOffset.y < lastOffset.y) { 
       [toolBar setHidden:YES]; 
       [[[self navigationController] navigationBar] setHidden:YES]; 
     } else{ 
       // unhide 
     } 
} 

- (void)scrollViewDidScroll :(UIScrollView *)scrollView { 
     /// blah blah 
     lastOffset = scrollView.contentOffset; 
} 

Note: lastOffset là một CGPoint và nó đi trong tập tin tiêu đề của bạn: @Interface.

+0

mdominick: ý bạn là gì với "iVar"? – filou

+0

Biến thể hiện. – mdominick

+0

Tôi khá mới với điều này: S làm thế nào để xác định biến này? nó là một NSString? – filou

0

Đây là giải pháp của tôi trong Swift; nó hoạt động tuyệt đẹp

func scrollViewDidScroll(scrollView: UIScrollView) { 
    let navController: UINavigationController = self.navigationController! 
    if self.collectionView.panGestureRecognizer.translationInView(self.view).y <= 0.0 { 
     defaultCenter.postNotificationName("stuffShouldHide", object: self) 
    } else { 
     defaultCenter.postNotificationName("stuffShouldUnhide", object: self) 
    } 
} 
0

Bạn có thể kiểm tra điều này, có sẵn từ iOS8, tôi nghĩ rằng đây là điều ngược lại những gì bạn đang tìm kiếm ... nhưng giá trị kiểm tra vì nó là một cái gì đó tiêu chuẩn và đây là cách Safari hoạt động.

Swift

var hidesBarsOnSwipe: Bool

Objective-C

@property (nonatomic, readwrite, chuyển nhượng) BOOL hidesBarsOnSwipe Thảo luận

Khi thuộc tính này được thiết lập để YES , một lần vuốt lên sẽ ẩn thanh điều hướng và thanh công cụ. Một lần vuốt xuống sẽ hiển thị lại cả hai thanh. Nếu thanh công cụ không có bất kỳ mục nào, nó vẫn hiển thị ngay cả sau khi vuốt . Giá trị mặc định của thuộc tính này là NO.

Các vấn đề liên quan