Move a view when scrolling in UITableView

前端 未结 9 1943
孤街浪徒
孤街浪徒 2020-12-04 11:42

I have a UIView with a UITableView below it:

\"enter

9条回答
  •  粉色の甜心
    2020-12-04 12:06

    You can make it like this:

    Add these as your class variables:

    private let NUMBER_OF_ROWS: Int = 256
    private let ROW_HEIGHT: CGFloat = 75.0
    private let MINIMUM_CONSTANT_VALUE: CGFloat = -150.0 /// This is the hidable view's height
    
    @IBOutlet weak var hidableViewTopConstraint: NSLayoutConstraint! /// This is an outlet from your storyboard
    private var lastContentOffset: CGFloat = 0.0
    
    

    This goes on your viewDidLoad():

    tableView.delegate = self
    

    And then you add this as an extension for your view controller:

    extension ViewController: UIScrollViewDelegate {
    
        func scrollViewDidScroll(_ scrollView: UIScrollView) {
    
            let delta = tableView.contentOffset.y - lastContentOffset
    
            let canScrollUp: Bool =
                delta < 0 &&
                  hidableViewTopConstraint.constant < 0 &&
                    scrollView.contentOffset.y < 0
    
    
    
            let canScrollDown: Bool =
                delta > 0 &&
                  hidableViewTopConstraint.constant > MINIMUM_CONSTANT_VALUE &&
                    tableView.contentOffset.y > 0
    
    
            if canScrollUp || canScrollDown{
    
                hidableViewTopConstraint.constant -= delta
                tableView.contentOffset.y -= delta
    
            }
    
            lastContentOffset = tableView.contentOffset.y
    
        }
    }
    
    

    But note that the scroll mechanism will only work when the TableView is scrolled. The top view wont collapse or expand if you scroll it.

    I made an example project you can check, it is called iOSFixedHeaderList

提交回复
热议问题