0

我在我的應用程序(如Instagram的)做了ScrollToTop功能,我在我的應用程序使用缺省UINavigationBar的,滾動默認UINavigationBar的結果hideTheNavBar在另一個UIViewController中

要做到這一點我用下面的方法

- (void)scrollViewDidScroll:(UIScrollView *)sender 
{ 
    //Initializing the views and the new frame sizes. 
    UINavigationBar *navbar =self.navigationController.navigationBar; 
    UIView *tableView = self.view; 
    CGRect navBarFrame = self.navigationController.navigationBar.frame; 

    CGRect tableFrame = self.view.frame; 

    //changing the origin.y based on the current scroll view. 
    //Adding +20 for the Status Bar since the offset is tied into that. 

    //if (isiOS7) 
    //{ 
     navBarFrame.origin.y = MIN(0, MAX(-64, (sender.contentOffset.y * -1))) +20 ; 
     tableFrame.origin.y = navBarFrame.origin.y + navBarFrame.size.height; 

    //}else{ 
     // navBarFrame.origin.y = MIN(0, (sender.contentOffset.y * -1)) +20; 
     // tableFrame.origin.y = MIN(0,MAX(-44,(sender.contentOffset.y * -1))) ; 
    //} 

    navbar.frame = navBarFrame; 
    tableView.frame = tableFrame; 
} 

現在的問題是,當我用這個方法,這是在當前視圖控制器(按Ctrl A)完全正常

第1步:滾動我的UIScrollView或者UITableView的在按Ctrl A(默認的NavBar隱藏在按Ctrl A)

第2步:現在,我推着或呈現另一個視圖控制器(按Ctrl B)

結果:按Ctrl B默認的NavBar那張隱藏的(空黑色空間)

感謝您的幫助。

回答

0

UINavigationBar在導航控制器內的所有視圖控制器之間共享。所以你需要添加一個調用來將導航欄的框架重置爲每個視圖控制器的viewDidAppear:中的原始值。

而不是你自己寫這個,你可以使用一個開源項目,像TLYShyNavBar https://github.com/telly/TLYShyNavBar

0

這裏也是我在我的實現代碼如下應用程序使用真棒自定義類。 https://github.com/inamiy/YIFullScreenScroll

如果需要,它也隱藏你的底部欄。您也可以自定義它。

self.fullScreenScroll = [[YIFullScreenScroll alloc] initWithViewController:self scrollView:tblView style:YIFullScreenScrollStyleFacebook]; 
self.fullScreenScroll.shouldHideTabBarOnScroll = NO;//Hiding bottom bar 

如果您想使用,還有更多的自定義選項。