Alex Rivera | Logout

make UIView in UIScrollView stick to the top when scrolled up

Asked 2012-06-30T08:56:12.770
18

So in a UITableView when you have sections the section view sticks to the top until the next section overlaps it and then it replaces it on top. I want to have a similar effect, where basically I have a UIView in my UIScrollView, representing the sections UIView and when it hits the top.. I want it to stay in there and not get carried up. How do I do this? I think this needs to be done in either layoutSubviews or scrollViewDidScroll and do a manipulation on the UIVIew..

Edit
Report

2 Answers

25

To create UIView in UIScrollView stick to the top when scrolled up do:

func createHeaderView(_ headerView: UIView?) {
    self.headerView = headerView
    headerViewInitialY = self.headerView.frame.origin.y
    scrollView.addSubview(self.headerView)
    scrollView.delegate = self
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let headerFrame = headerView.frame
    headerFrame.origin.y = CGFloat(max(headerViewInitialY, scrollView.contentOffset.y))
    headerView.frame = headerFrame
}
answered 2013-06-27T09:52:08.097
2

If I recall correctly, the 2010 WWDC ScrollView presentation discusses precisely how to keep a view in a fixed position while other elements scroll around it. Watch the video and you should have a clear-cut approach to implement.

It's essentially updating frames based on scrollViewDidScroll callbacks (although memory is a bit hazy on the finer points).

answered 2012-06-30T14:29:04.600

Your Answer