我有一个UICollectionViewController,我添加了两个UIViews作为子视图。一个是紫色的UIView,上面是另一个白色的UIView,蓝色的集合视图在两个后面向上滚动。
在那些UIViews之下,我从前300名(这是两个UIViews的高度的总大小)制作了collectionView.contentInset
。我想要完成的是滚动集合视图以及上面的两个UIViews。它几乎类似于这个线程(Move a view when scrolling in UITableView)上的解决方案,除非我覆盖scrollViewDidScroll,整个框架向上滚动,单元格在两个视图后面。我想要的只是向上滚动UIViews,然后滚动浏览集合视图。我觉得这可能涉及嵌套的滚动视图。
这就是我覆盖scrollViewDidScroll的方式:
var rect = self.view.frame
rect.origin.y = -scrollView.contentOffset.y - 300
self.view.frame = rect
编辑:我发布了一个视频,演示了我想要为iOS Tumblr应用程序做什么:https://youtu.be/elfxtzoiHQo
我通过以下一些基本步骤达到了相同的要求。
//Declare the view which is going to be added as header view
let requiredView = UIView()
//Add your required view as subview of uicollectionview backgroundView view like as
collectionView.backgroundView = UIView()
collectionView.backgroundView?.addSubview(requiredView)
//After that control the frame of requiredHeaderView in scrollViewDidScroll delegate method like
func scrollViewDidScroll(scrollView: UIScrollView) {
let per:CGFloat = 60 //percentage of required view to move on while moving collection view
let deductValue = CGFloat(per / 100 * requiredView.frame.size.height)
let offset = (-(per/100)) * (scrollView.contentOffset.y)
let value = offset - deductValue
let rect = requiredView.frame
self.requiredView.frame = CGRectMake(rect.origin.x, value, rect.size.width, rect.size.height)
}
听起来你想要的是标题。
您可以使用以下任一方法为标头指定类或nib:
self.collectionView.registerClass(_:, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier:)
registerNib(_:, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: )
如果使用流布局,还应指定参考高度:self.flowLayout.headerReferenceHeight = ...
然后你可以通过你的UICollectionViewController在collectionView(_:, viewForSupplementaryElementOfKind:, at:)
中提供标题,方法是检查节标题类型。
这是一个体面的教程,供参考:https://www.raywenderlich.com/78551/beginning-ios-collection-views-swift-part-2
你有一个图书馆CSStickyHeaderFlowLayout
来自自述文件:
UICollectionView替换UITableView。甚至更像Parallax Header,Sticky Section Header。适用于iOS 7。
试试这个。
headerViewYConstraint
是标题视图的前y约束。
存储最后一个联系人偏移量。
var lastContentOffset: CGFloat = 0
override func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView != contentScrollView {
if scrollView.dragging || scrollView.decelerating {
let newOffset = scrollView.contentOffset.y
let headerViewHeight = headerView.frame.width
if headerViewHeight > 0 && scrollView.contentSize.height > view.frame.height + headerViewHeight{
var topOffset = newOffset == 0 ? 0.0 : (headerViewYConstraint.constant + lastContentOffset - newOffset)
topOffset = min(0, max(topOffset, -headerViewHeight))
if headerViewYConstraint.constant > topOffset || newOffset < headerViewHeight || lastDirectionalContentOffset - newOffset > cellHeight(){
headerViewYConstraint.constant = topOffset
}
} else {
headerViewYConstraint.constant = 0
}
lastContentOffset = newOffset
}
}
}