带有scrollView和stackview的粘性标题

时间:2017-01-02 09:15:08

标签: ios header scrollview sticky

我知道粘贴标题不是一个新问题,但仍然......

我正在尝试创建一个粘性标题(UIImageView)和滚动部分(UIScrollView中包含UIStackView)

我正在使用scrollViewDidScroll中的UIScrolLViewDelegate方法。唯一的问题是,当我向上滚动视图时,我不仅降低了标题视图的高度,还滚动了堆栈视图的内容。因此,当我向上滚动时,您仍然可以看到标题视图,但滚动视图的顶部内容会通过滚动消失。

这可以通过某种方式解决,当我向上滚动时,堆栈视图的内容是向上滚动而不是也消失了?当标题视图消失时开始消失?

谢谢

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用表格视图。您的粘性标题是表格的第一部分标题,而滚动部分是第二部分。

如果由于某种原因无法使用表格,则必须使用滚动视图的内容偏移量。当contentOffset.y增长(但不超过标题的高度)时,将其重置为0并相应地降低标题的高度。在标题的高度为0之后,停止弄乱contentOffset - 直到你回来并且contentOffset.y想要进入底片。

P.S。第二个解决方案要求您在滚动视图上启用弹跳。否则,标题将被隐藏,但不会再次显示(除非您重置控制器)

L.E。我的第二个解决方案的一些(旧)代码:

let headerHeight = self.headerView.height
self.scrollHandler = {
    var offset = self.detailsTable.contentOffset

    self.headerTopConstraint.constant -= offset.y
    if self.headerTopConstraint.constant < -headerHeight {
        self.headerTopConstraint.constant = -headerHeight

        let size = self.detailsTable.contentSize
        if offset.y + self.detailsTable.frame.height > size.height {
            offset.y = size.height - self.detailsTable.frame.height
        }

        self.detailsTable.contentOffset = offset
    }
    else {
        if self.headerTopConstraint.constant > 0 {
            self.headerTopConstraint.constant = 0
        }
        self.detailsTable.contentOffset = CGPointZero
    }
}

请注意我的代码向上移动标题以隐藏它。据我所知,你只需改变标题的高度(向上移动它的数量相同)。