【问题标题】:How can I test whether the UICollectionView header is currently in the view rect?如何测试 UICollectionView 标头当前是否在视图矩形中?
【发布时间】:2013-09-21 03:17:50
【问题描述】:

我需要知道 UICollectionView 标题补充视图当前是否在视图中,以便在更改应用设置/首选项时强制它刷新/更新。

如果标题不在视图中,一旦滚动到,标题将被正确绘制,但现在只发生在加载时,如果用户滚动标题然后返回。

如果标题在视图中,我需要更新它,但我真的不想在每次此设置更改时都重新加载整个第 0 部分(仅当标题在视图中时......)。

【问题讨论】:

    标签: ios objective-c uicollectionview uicollectionviewlayout uicollectionreusableview


    【解决方案1】:

    你可以做一些事情,比如在视图出队时保留一个属性。然后在它消失时更改它:

    - (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath;
    

    根据您希望更新发生的方式,您可以保留 bool isVisible 或在 NSTimer 出现时启动它并在它消失时停止计时器。

    不幸的是,它看起来没有 visibleSupplementaryViews 方法。

    【讨论】:

    • 嘿,所以我尝试利用 didEndDisplayingSuppView。这是问题所在:标题视图滚动到视图中,或者当前在视图中。标志 headerVisible = true。更改需要标头更新的设置。调用重新加载部分。 viewForSuppElementOfKind 设置 headerVisible = true。然后,由于某种原因,didEndDisplayingSuppView 被调用,我将 isVisible 设置为 false,这使我处于不正确的状态。工作流程总是以 didEndDisplaying 结束,所以我似乎无法正确设置标志。
    • 在我的情况下,当我有一个空的集合视图要启动并且 viewForSuppView 被称为 onload 时。一旦我有了数据并重新加载集合,就会调用 didEndDisplaySupp。然后当数据重新加载时,再次调用 viewForSuppView。这很好。但是,当我认为标题在视图中时重新加载截面视图时,我调用 reloadSections,并调用 viewForSuppView 以使新的标题视图出列,headerVisible=true 设置。然后 didEnd 被调用以结束不是最近的新 viewForSuppView ,而是在那之前的那个......这是意料之外的。至少在我的情况下。
    • 您可以在创建补充视图时保留对它的引用。例如在 viewForSupplementaryView 中执行 if (indexPath.section == 0) { if (!self.myHeader) {self.myHeader = [collectionView dequeueSuppView]; } toReturn = self.myHeader; } 然后使用该属性引用执行更新。只需确保在正确的时间取消该引用,因为 CV 如何重用视图。
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多