粘滞的UICollectionView标头F#

时间:2018-01-19 13:40:39

标签: ios f# xamarin.ios uicollectionview uicollectionviewlayout

我有一个UICollectionViewController,其布局如下:

enter image description here

所以我们有一个CollectionView和一个包含可重用视图的Header。

我为可重用的视图实现了以下方法:

override x.GetViewForSupplementaryElement(collectionView : UICollectionView, elementKind : NSString, indexPath : NSIndexPath) =
    let headerView = (collectionView.DequeueReusableSupplementaryView(elementKind,new NSString("HeaderView"),indexPath))
    headerView

我唯一的问题是,我不希望标题与UICollectionView一起滚动,我希望它始终位于UICollectionView之上的固定位置。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

可以使用以下代码完成:

let layout = x.CollectionView.CollectionViewLayout :?> UICollectionViewFlowLayout
layout.SectionHeadersPinToVisibleBounds <- true

改编自UICollectionView sticky header in swift

为了消除collectionView顶部的空白区域,请执行以下操作:

x.AutomaticallyAdjustsScrollViewInsets <- false
x.CollectionView.ContentInset <- UIEdgeInsets(Conversions.nfloat(-44),Conversions.nfloat(0), Conversions.nfloat(0), Conversions.nfloat(0))

请注意,-44的值专门用于iPhone X,并且可能因其他型号而异。

转化用于转换为nfloat。这是执行此转换的代码:

let inline nfloat (x:^a) : ^b = ((^a or ^b) : (static member op_Implicit : ^a -> nfloat) x)

最后,如果您希望消除UICollectionView之上的垂直弹跳,请将以下代码添加到UICollectionViewController

override x.Scrolled(scrollView : UIScrollView) = 
    if (scrollView.ContentOffset.Y < Conversions.nfloat(0)) then 
        scrollView.ContentOffset <- CGPoint(scrollView.ContentOffset.X, Conversions.nfloat(0))