iOS 11 UI Collection Section Header 裁剪滚动指示器

Posted

技术标签:

【中文标题】iOS 11 UI Collection Section Header 裁剪滚动指示器【英文标题】:iOS11 UICollectionSectionHeader clipping scroll indicator 【发布时间】:2017-10-14 18:27:01 【问题描述】:

我创建了一个单视图项目并添加了一个collectionView。我注册了一个简单的 UICollectionReusableView 子类

final class TestReusableView: UICollectionReusableView 
  override init(frame: CGRect) 
    super.init(frame: frame)
    backgroundColor = UIColor.red
  
  ...

设置数据源并委托给自己

extension ViewController: UICollectionViewDataSource 
  func numberOfSections(in collectionView: UICollectionView) -> Int 
    return 1
  

  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return 100
  

  func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView 
    let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: kHeader, for: indexPath)
    return headerView
  

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
    cell.backgroundColor = UIColor.blue
    return cell
  


extension ViewController: UICollectionViewDelegateFlowLayout 
  func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize 
    return CGSize(width: collectionView.bounds.width, height: 88)
  

结果是节标题似乎位于垂直滚动指示器上方。但是,如果我在 10.3.1 模拟器上运行该应用程序,则行为会按我的预期工作。

【问题讨论】:

我在 ios 11.0 中也遇到了类似的问题,其中节标题位于所有视图之上。在 10.3 中一切正常。 绝对看起来像 iOS 11.0+ 问题。我也遇到了。我能找到的最近的雷达是:openradar.me/34308893 【参考方案1】:

这对我有用:

- (void)collectionView:(UICollectionView *)collectionView willDisplaySupplementaryView:(UICollectionReusableView *)view forElementKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath 
    if (SystemVersionGraterOrEqual(11)) 
        if ([elementKind isEqualToString:UICollectionElementKindSectionHeader]) 
            view.layer.zPosition = 0;
    

【讨论】:

很好,虽然整个问题看起来像一个错误,因为不应该使用 z 位置。【参考方案2】:

我无法尝试,但您可以尝试将其添加到您的viewDidLoad()

let flow = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
flow.sectionHeadersPinToVisibleBounds = true

【讨论】:

这只是将节标题固定到 collectionView 的顶部。有问题的问题是节标题正在剪裁垂直滚动指示器【参考方案3】:

好吧,即使我在我的应用程序中遇到了同样的问题,它也计划在 2 周内发布。我没有时间研究为什么这仅在 iOS 11 中失败。因此,我所做的快速解决方法是将 headerView 的用法替换为 footerView,因为 footerView 没有这个问题。

【讨论】:

以上是关于iOS 11 UI Collection Section Header 裁剪滚动指示器的主要内容,如果未能解决你的问题,请参考以下文章

NX二次开发-UFUN点收集器UF_UI_select_point_collection

在 iOS 11 上调整 UI 导航

iOS 11 vs 10: UI和交互全面对比分析

如何解决 iOS 10 和 iOS 11 之间的这种 UI 差异

ios11 and iphoneX UI设计规范

ISupportIncrementalLoading Collection - 在 LoadingMoreItems 正在进行时通知 UI