hidesBarsOnSwipe在向上滚动到顶部时不显示navigationBar

时间:2015-10-07 12:59:29

标签: ios objective-c uinavigationcontroller uinavigationbar

我正在尝试在iOS8中使用命令来启用滚动时隐藏导航栏的行为。

这是代码

-(void)viewDidAppear:(BOOL)animated 
{
    self.navigationController.hidesBarsOnSwipe = YES;
}

当快速向上滚动时,没有问题,因为导航栏会被拖动并自动显示。但即使我慢慢向上滚动到顶部。导航栏不显示。

我尝试使用scrollView委托更正此行为。但这也行不通。因为动画看起来不太好看。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{

if(floor(NSFoundationVersionNumber) >= NSFoundationVersionNumber_iOS_8_0)
{
    float scrollOffset = scrollView.contentOffset.y;

    if (scrollOffset < 10)
    {
        self.navigationController.navigationBarHidden = NO;
    }
}

}

请帮忙。我想尽可能简单地做到这一点。提前致谢

3 个答案:

答案 0 :(得分:2)

要显示它何时到达顶部,请使用以下

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

  if indexPath.row == 0 {
    self.navigationController?.hidesBarsOnSwipe = false
    self.navigationController?.setNavigationBarHidden(false, animated: true)
  } 
  else {
    self.navigationController?.hidesBarsOnSwipe = true
}

答案 1 :(得分:2)

我刚遇到同样的问题。

当我使用hidesBarsOnSwipe UINavigationController属性时。 滚动/滑动时我无法再显示它。 在我的情况下,我使用 UIScrollView ,而scrollview的顶部是Aling to SafeArea.Top

  

我刚刚将scrollview的顶部更改为 SuperView.Top ,并且其工作正常。

感谢。

答案 2 :(得分:1)

我有一个UIScrollView,顶部有正确的约束,但它的行为仍然很奇怪。

我这样解决了:

-(void)scrollViewDidScroll: (UIScrollView*)scrollView
{
    float scrollViewHeight = scrollView.frame.size.height;
    float scrollContentSizeHeight = scrollView.contentSize.height;
    float scrollOffset = scrollView.contentOffset.y;

    if (scrollOffset < 0) 
    {
        self.navigationController.hidesBarsOnSwipe = NO;
        [self.navigationController setNavigationBarHidden:NO animated: YES];
    }
    else
    {
        self.navigationController.hidesBarsOnSwipe = YES;
    }
}