2017-07-20 8 views
1

UICollectionViewをスクロールすると、複数のスクロールインジケータが表示されます。私はコレクションのすべてのセクションに1つが​​あることに気付きました。同時に3を表示するスクリーンショットを参照してください。すべてのセクションのスクロールインジケータを表示するUICollectionView(ヘッダのzIndexが壊れています)

enter image description here

誰もが同じ問題を経験しましたか?私は3マイcollectionviewセットアップはかなり一般的であるXcodeの9ベータ版を使用しています:

private let formCollectionView: UICollectionView = { 
     let collectionViewLayout = UICollectionViewFlowLayout() 
     collectionViewLayout.minimumLineSpacing = 0 
     collectionViewLayout.minimumInteritemSpacing = 0 
     let collectionView = UICollectionView(frame: .zero, collectionViewLayout: collectionViewLayout) 
     collectionView.translatesAutoresizingMaskIntoConstraints = false 
     collectionView.backgroundColor = UIColor.clear 
     return collectionView 
}() 

編集2017年10月16日

でもTwitterは、この問題を持つようだ:

enter image description here

+0

奇妙です。スクリーンショットからの説明は難しいですが、本当にスクロールインジケータではなく、切り離されている他のビューだけではありませんか? – NRitH

+1

'showsVerticalScrollIndicator'をfalseに設定することでそれらを取り除くことができるので、間違いなくスクロールインジケータです。私がスクロールしている間に、彼らは姿を現し、消えるまで身長を下げています。そして、いいえ、私はハッシュを喫煙していません。 –

+0

これに関するアップデートはありませんか?これは「すべての」iOSバージョンで発生しますか? – swalkner

答えて

2

まず最初に、radarがあります。

回避策が提案されています。私は私のUICollectionReusableViewサブクラスの中でこのくそをすることで部分的に成功しました。

override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) { 
    super.apply(layoutAttributes) 
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.01) { 
     self.layer.zPosition = 0 
    } 
} 

あなたが少し長くUICollectionView持っている場合、それはまだいくつかのヘッダーのために破損していますので、私は部分的に言っています。それらのほとんどは大丈夫です。それはあなたの状況によって異なります。うまくいけば、そのレーダーはすぐに対処されることを望みます。

+0

信頼できる[回避方法](https://stackoverflow.com/questions/46903209/uicollectionview-fails-to-honour-zposition-and-zindex-ios-11-only/) –

1

複数のスクロールインジケータではありません。ヘッダービューのzインデックスは、スクロールインジケータービューのzインデックスよりも高くなっています。

編集:ビューのデバッガを実行すると、スクロールインジケータがヘッダーの上に配置されています。奇妙なことが起こっています。

+0

興味深いです。私はコレクションビューにもバグがあります。編集(並べ替え/ドラッグアンドドロップ)すると、セルのヘッダービューがドラッグされたセルをカバーしていることになります。私はどこでもzIndexを設定していません。私はカスタムレイアウトを使用していません、デバイスオリエンテーション適応のための 'referenceSizeForHeaderInSection'と' sizeForItemAt'だけです。すべてがiOS 10で正常に動作しています。このバグも経験しましたか?どのように修正するためのヒントはありませんか? –

+0

関連[radar](http://www.openradar.me/34308893)が見つかりました。しかし、提案された回避策で運がない。 –

0

この問題を解決する簡単な方法があります。あなたのセクションヘッダビュークラスでは、メソッドlayoutSubviewsを上書きすることができ、かつ書き込み:

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    self.layer.zPosition = 0; 
} 

をiOS11前に、断面の層ZPOSITION値はデフォルトの0ですが、iOS11で、このデフォルト値は1

ある、ので
+0

それはまだ私のために壊れたままです。すべてのヘッダーではなく、いくつかのヘッダーがあります。修正率は、すでに提案されている 'apply(_ :)'オーバーライドと非常によく似ています:( –

+0

eee ... 'Debug View Hierarchy'を使うべきでしょうか、または 'Reveal'セクションヘッダービュー層zPositionが実際に0 –

3

あなたはOC

次の例では、デリゲートmethod.asでこの問題を解決することができます

- (void)collectionView:(UICollectionView *)collectionView willDisplaySupplementaryView:(UICollectionReusableView *)view forElementKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath 
    { 
     if (@available(iOS 11.0, *)) { 
      if ([elementKind isEqualToString:UICollectionElementKindSectionHeader]) { 
       view.layer.zPosition = 0; 
      } 
     } 
    } 

迅速

public func collectionView(_ collectionView: UICollectionView, willDisplaySupplementaryView view: UICollectionReusableView, forElementKind elementKind: String, at indexPath: IndexPath) 
{ 
    if (elementKind == UICollectionElementKindSectionHeader) { 
     view.layer.zPosition = 0; 
    } 
} 
+0

このソリューションは、他のものよりも一貫して機能しているようです。 – Jerry

関連する問題