2015-10-14 20 views
20

Sembra che la nuova funzionalità di Apple dell'interfaccia auto-flip nelle lingue RTL causi problemi quando si utilizza UICollectionView.UICollectionView Edizione iOS 9 su progetto con supporto lingue RTL

Ho utilizzato i vincoli di tipo Trailing/Leading per la vista raccolta e hanno commutato i loro valori, come dovrebbero, sul linguaggio RTL.

Il problema è che i dati effettivamente presentati è degli ultimi indexPath nella sorgente di dati della collezione, ma il UIScrollView.contentOffset.x della prima cella è 0.

Un comportamento corretto sarebbe stato uno dei seguenti modi:

  1. Visualizzazione del primo indexPath correttamente e il passaggio alla direzione della coclea (a destra) - l'opzione migliore
  2. Non lanciando l'interfaccia utente/Vincoli in modo che il-dati presentati/indexPath/scrollView.contentOffset.x verrà sincronizzato - Opzione che disabilita il supporto RTL.
  3. Presentazione della cella e dei dati dell'ultimo indexPath ma correzione del scrollView.contentOffset.x per rappresentare anche l'ultima posizione della cella.

Credo che Apple potrebbe risolvere il problema in futuro, ma nel frattempo dovremo utilizzare soluzioni alternative come l'inversione dell'array e/o lo scorrimento fino all'ultimo oggetto.

+1

Potrebbe presentare una segnalazione di errore in [bugreport.apple.com] (http://bugreport.apple.com/)? – wakachamo

+0

@wakachamo Lo farà! Grazie per il collegamento diretto ... – MatanGold

+3

Se si implementa una soluzione, si prega di scorrere la vista invece di invertire l'array - il bug si trova nella posizione iniziale, non nel layout stesso. – lensovet

risposta

-1

Ero in una situazione simile e ho trovato una soluzione per questo. Se stai usando swift, aggiungi il seguente snippet al tuo progetto, e si assicurerà che il bounds.origin segua sempre il bordo di attacco della vista di raccolta.

extension UICollectionViewFlowLayout { 

    open override var flipsHorizontallyInOppositeLayoutDirection: Bool { 
     return true 
    } 
} 

Se si utilizza Objective-C, appena sottoclasse della classe UICollectionViewLayout, e sovrascrivere flipsHorizontallyInOppositeLayoutDirection, e ritornare vero. Utilizzare questa sottoclasse come oggetto di layout della vista raccolta.

+0

In caso di down-voting di una risposta, si prega di mostrare la cortesia di aggiungere un commento sul perché? In questo modo tutti possono imparare perché questo è un approccio sbagliato. – Suran

0

C'è una soluzione comune per quel problema che funziona per me, seguire la procedura per superare questo problema,

  • Dare il vincolo layout automatico secondo il vostro requisito e poi da attributo ispettore modificare la proprietà controllo semantico della vista raccolta per Forzare da destra a sinistra dallo storyboard.

enter image description here

  • storyboard poi aperto come codice sorgente e trovare per i “leader” attributi della vostra vista collezione pertinenti e sostituire quella con la “sinistra” e lo stesso per la “finale” sostituirlo con la destra". Ora hai quasi finito.

enter image description here

enter image description here

enter image description here

  • ora che vi darà dei risultati secondo il vostro requisito.