4

I have view controller with tableview when i scroll tableview i want to hide tab bar in view controller. i have tried below code its working but top label went minus position of origin Y

extension UITabBarController {
    func setTabBarVisible(visible:Bool, duration: TimeInterval, animated:Bool) {
    if (tabBarIsVisible() == visible) { return }
    let frame = self.tabBar.frame
    let height = frame.size.height
    let offsetY = (visible ? -height : height)

    // animation
    if #available(iOS 10.0, *) {
        UIViewPropertyAnimator(duration: duration, curve: .linear) {
            self.tabBar.frame.offsetBy(dx:0, dy:offsetY)
            self.view.frame = CGRect(x:0,y:0,width: self.view.frame.width, height: self.view.frame.height + offsetY)
            self.view.setNeedsDisplay()
            self.view.layoutIfNeeded()
            }.startAnimation()
    } else {
        // Fallback on earlier versions
    }
}

func tabBarIsVisible() ->Bool {
    return self.tabBar.frame.origin.y < UIScreen.main.bounds.height
}
}

//Scroll view delegate method
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.panGestureRecognizer.translation(in: scrollView).y < 0{
        //scrolling down
        self.tabBarController?.setTabBarVisible(visible: false, duration: 0.3, animated: true)
    }
    else{
        //scrolling up
        self.tabBarController?.setTabBarVisible(visible: true, duration: 0.3, animated: true)
    }
}

Here its video link https://drive.google.com/file/d/1yNc_mYNySFEd5XLxYn6PG4uizBu82hIp/view

Thank you

Nihar Dodiya
  • 135
  • 1
  • 9

1 Answers1

5

Your Tabbar frame is not setting correctly. Modify your code as following. It works

 //Scroll view delegate method
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView.panGestureRecognizer.translation(in: scrollView).y < 0{
            //scrolling down
            self.tabBarController?.setTabBarVisible(visible: false, duration: 0.3, animated: true, tableView: tableView)
        }
        else{
            //scrolling up
            self.tabBarController?.setTabBarVisible(visible: true, duration: 0.3, animated: true, tableView: tableView)
        }
    }




 func setTabBarVisible(visible:Bool, duration: TimeInterval, animated:Bool,tableView:UITableView) {
    if (tabBarIsVisible() == visible) { return }
    let frame = self.tabBar.frame
    let height = frame.size.height
    let offsetY = (visible ? -height : height)
    let heightToAdjusted = visible ? 0:22
    // animation
    if #available(iOS 10.0, *) {
        UIViewPropertyAnimator(duration: duration, curve: .linear) {
            self.tabBar.frame = CGRect(x: 0, y: self.view.frame.height+offsetY, width: self.view.frame.width, height: height)

            tableView.frame = CGRect(x: tableView.frame.origin.x, y:  tableView.frame.origin.y, width:  tableView.bounds.width, height:  tableView.bounds.height+offsetY)

            self.view.setNeedsDisplay()
            self.view.layoutIfNeeded()
            }.startAnimation()
    } else {
        // Fallback on earlier versions
    }
}
Jeesson_7
  • 761
  • 1
  • 11
  • 38
  • Hii `UITableView` position keep same when i scroll up and down. but i got black bottom view when UITabBar get hidden. is there any solution for it? – Nihar Dodiya Dec 28 '18 at 06:48
  • I have solved bottom bar black view using "Check Under Bottom Bars & Under Opaque Bar". Thank you for your answer its works – Nihar Dodiya Dec 28 '18 at 06:57