2015-10-14 12 views
20

UICollectionViewを使用するとRTL言語の自動フリップインターフェイスのAppleの新機能が問題を引き起こすようです。UICollectionView RTL言語をサポートしているプロジェクトのiOS 9の問題

私は、コレクションビューのタイプとしてTrailing/Leadingの制約を使用し、RTL言語でそれらの値を必要に応じて切り替えました。

問題は、実際に提示されたデータは、コレクションのデータソース内の最後indexPathが、最初のセルのUIScrollView.contentOffset.xであり、適切な行動は、次のいずれかだったでしょう0

であるということである。

  1. 正しく最初indexPathを表示して(右へ)、スクロールの方向を切り替える - ベストオプション
  2. を提示し、データ/ので、UI /制約をひっくり返すありませんindexPath/scrollView.contentOffset.xは同期されます - RTLサポートを無効にするオプション。
  3. 最後のindexPathのセルとデータを表示しますが、最後のセル位置を表すようにscrollView.contentOffset.xを固定します。

私はAppleがいつかそれを将来修正するかもしれないと思っていますが、一方でアレイの逆転や最後のオブジェクトへのスクロールのような回避策を使わなければなりません。

+1

[bugreport.apple.com](http://bugreport.apple.com/)にバグレポートを提出してください。 – wakachamo

+0

@wakachamoします!直接リンクありがとうございました... – MatanGold

+3

回避策を実装する場合は、配列を逆転させる代わりにビューをスクロールしてください。バグはレイアウト自体ではなく、最初の位置にあります。 – lensovet

答えて

-1

私は同様の状況にあり、これに対する解決策を見つけました。 swiftを使用している場合は、次のスニペットをプロジェクトに追加します。これにより、bounds.originが常にコレクションビューの先頭に続くことが確認されます。あなたはObjective-Cのを使用している場合

extension UICollectionViewFlowLayout { 

    open override var flipsHorizontallyInOppositeLayoutDirection: Bool { 
     return true 
    } 
} 

、ちょうどUICollectionViewLayoutクラスをサブクラス化し、flipsHorizo​​ntallyInOppositeLayoutDirectionをオーバーライドし、trueを返します。このサブクラスは、コレクションビューのレイアウトオブジェクトとして使用します。

+0

答えをダウン投票しているときは、理由をコメントしてください。そうすれば、なぜこれが悪い方法であるのか誰もが知ることができます。 – Suran

0

その問題を克服するために下記の手順、私の作品にその問題のための一つの共通の解決策、

  • があなたの要件ごとに自動レイアウト制約を与え、その後、属性インスペクターからセマンティックコントロールプロパティを変更がありますコレクションビューの右から左にストーリーボードから強制的に移動します。

enter image description here

  • そして、オープンソースコードとしてストーリーボードとあなたの関連するコレクションビューの「一流」の属性を見つけると「左」と「後」とのことを置き換えるために同じでそれを置き換えます権利"。今ほとんど終わった。

    enter image description here

    • enter image description here

      enter image description here

  • は今、それはあなたがあなたの要件ごとに結果となります。