Monday 23 October 2017

Edgesforextendedlayout Uitableview Sfondo


Scorrimento continuo in UITableView e UICollectionView Come la maggior parte iOS sviluppatori conoscono, visualizzazione serie di dati è un compito piuttosto comune nella costruzione di una app mobile. Mele SDK fornisce due componenti per contribuire a realizzare un tale compito, senza dover implementare tutto da zero: Una vista tabella (UITableView) e una vista di raccolta (UICollectionView). vista da tavolo e viste di raccolta sono entrambi progettati per supportare insiemi di dati che mostrano che si possono scorrere. Tuttavia, quando si visualizza una grande quantità di dati, potrebbe essere molto difficile da ottenere una scorrimento perfettamente liscia. Questo non è l'ideale perché colpisce negativamente l'esperienza dell'utente. In qualità di membro del team di sviluppo di iOS per la Capital One Applicazione mobile, Ive ha avuto la possibilità di sperimentare con vista da tavolo e viste di raccolta questo post rispecchia la mia esperienza personale nella visualizzazione di grandi quantità di dati scorrevole. In esso, ben esaminare i suggerimenti più importanti per ottimizzare le prestazioni dei componenti SDK suddetti. Questo passaggio è fondamentale per ottenere un'esperienza di scorrimento molto regolare. Si noti che la maggior parte dei seguenti punti valgono sia per UITableView e UICollectionView in quanto condividono una buona quantità di loro sotto il cofano comportamento. Alcuni punti sono specifici per UICollectionView, come questa vista pone ulteriori dettagli di layout sulle spalle dello sviluppatore. Iniziamo con una rapida panoramica dei componenti di cui sopra. UITableView è ottimizzato per mostrare vista come una sequenza di righe. Poiché il layout è predefinito, il componente SDK si prende cura della maggior parte del layout e fornisce ai delegati che sono per lo più incentrati sulla visualizzazione del contenuto della cella. UICollectionView. d'altra parte, fornisce la massima flessibilità il layout è completamente personalizzabile. Tuttavia, la flessibilità in vista raccolta viene al costo di dover curare ulteriori dettagli su come il layout deve essere eseguita. Consigli comune ad entrambe le UITableView e UICollectionView NOTA: ho intenzione di usare UITableView per i miei frammenti di codice. Ma gli stessi concetti si applicano a UICollectionView pure. Le cellule Rendering è un compito critico L'interazione principale tra UITableView e UITableViewCell può essere descritto dai seguenti eventi: Per tutti gli eventi di cui sopra, la vista tabella è passare l'indice (riga) per cui l'interazione si svolge. Heres una visualizzazione del ciclo di vita UITableViewCell: Prima di tutto, il tableView (: metodo cellForRowAt :) dovrebbe essere il più veloce possibile. Questo metodo viene chiamato ogni volta deve essere visualizzato una cella. Il più veloce si esegue, lo scorrimento più agevole la visualizzazione della tabella sarà. Ci sono alcune cose che possiamo fare al fine di assicurarsi che rendiamo la cellula più velocemente possibile. Il seguente è il codice di base per rendere una cella, preso dalla documentazione Mele: Dopo il recupero l'istanza di cella che sta per essere riutilizzato (dequeueReusableCell (withIdentifier: per :)), abbiamo bisogno di configurarlo assegnando i valori richiesti per le sue proprietà . Diamo un'occhiata a come possiamo rendere il nostro codice eseguire rapidamente. Definire la vista del modello per le cellule Un modo è quello di avere tutte le caratteristiche di cui abbiamo bisogno per mostrare essere prontamente disponibili e solo assegnare quelli per il corretto controparte cellulare. Al fine di raggiungere questo obiettivo, siamo in grado di sfruttare il modello MVVM. Assumiamo che abbiamo bisogno di visualizzare un insieme di utenti a nostro avviso tavolo. Potremmo definire il modello per l'utente come: Definizione di una vista del modello per l'utente è semplice: recuperare i dati in modo asincrono e Cache visualizzare i modelli Ora che abbiamo definito il nostro modello e Vista modello, permette di farli lavorare Stiamo andando a recuperare i dati per gli utenti attraverso un servizio web. Naturalmente, vogliamo attuare la migliore esperienza utente possibile. Pertanto, ci prenderemo cura di quanto segue: Evitare di bloccare il thread principale durante il recupero dei dati. Aggiornamento della visualizzazione della tabella a destra dopo che recuperare i dati. Questo significa che ci sarà il recupero dei dati in modo asincrono. Faremo eseguire questa operazione tramite un controller specifico, al fine di mantenere la logica di recupero separato sia dal modello e la Vista del modello, come segue: Ora siamo in grado di recuperare i dati e aggiornare la vista della tabella in modo asincrono, come mostrato nel seguente frammento di codice: possiamo usare questo frammento di codice per recuperare i dati degli utenti in diversi modi: solo il quando si carica la tabella di vista la prima volta, ponendolo in viewDidLoad (). Ogni volta che viene visualizzata la vista tavolo, ponendolo in viewWillAppear (:). Su domanda degli utenti (ad esempio tramite un pull down to-refresh), ponendolo nella chiamata metodo che si prenderà cura di aggiornamento dei dati. La scelta dipende da quanto spesso i dati possono essere cambiando sul backend. Se i dati sono principalmente statico o non cambiare spesso la prima opzione è migliore. Altrimenti, dovremmo optare per la seconda. Caricare le immagini in modo asincrono e la cache loro il suo molto comune avere a caricare le immagini per le nostre cellule. Dal momento che stavano cercando di ottenere le migliori prestazioni di scorrimento possibile, abbiamo sicuramente non vogliamo bloccare il thread principale per andare a prendere le immagini. Un modo semplice per evitare che è quello di caricare le immagini in modo asincrono con la creazione di un semplice wrapper URLSession: Questo ci permette di recuperiamo ogni immagine utilizzando un thread in background e quindi aggiornare l'interfaccia utente, una volta i dati richiesti sono disponibili. Siamo in grado di migliorare le nostre prestazioni anche oltre, la memorizzazione nella cache delle immagini. Nel caso in cui noi non vogliamo - o cant permettersi - di scrivere asincrono personalizzato scaricamento delle immagini e la memorizzazione nella cache noi stessi, siamo in grado di trarre vantaggio da librerie, come SDWebImage o AlamofireImage. Queste librerie forniscono le funzionalità erano alla ricerca di out-of-the-box. Personalizzare il cellulare Per poter sfruttare appieno le visualizzare i modelli memorizzati nella cache, possiamo personalizzare il cellulare dell'utente da sottoclassi essa (da UITableViewCell per le viste da tavolo e da UICollectionViewCell per le viste di raccolta). L'approccio di base è quello di creare una presa di corrente per ogni proprietà del Modello che deve essere mostrato e inizializzare dal Model View: Utilizzare livelli opachi ed evitare gradienti Dato che l'utilizzo di uno strato trasparente o l'applicazione di un gradiente richiede una buona quantità di calcolo, se possibile, dovremmo evitare di usarle per migliorare le prestazioni di scorrimento. In particolare, si dovrebbe evitare di modificare il valore alfa e preferibilmente usare un colore RGB standard (evitare UIColor. clear) per la cella ed ogni immagine contiene: mettendo tutto insieme: Ottimizzato cellulare rendering A questo punto, la configurazione della cella una volta il suo tempo per rendono dovrebbe essere facile peasy e davvero veloce perché: Stiamo utilizzando i dati di vista del modello nella cache. Siamo il recupero delle immagini in modo asincrono. Ecco il codice aggiornato: suggerimenti specifici per cellule UITableView Usa auto-dimensionamento delle celle di altezza variabile Nel caso in cui le cellule che vogliamo visualizzare nel nostro punto di vista tabella hanno ad altezza variabile, possiamo usare le cellule autonome di considerevoli dimensioni. In sostanza, dovremmo creare appropriati vincoli di layout automatico per assicurarsi che i componenti dell'interfaccia utente che hanno altezza variabile si allungano in modo corretto. Poi abbiamo solo bisogno di inizializzare la estimatedRowHeight e proprietà rowHeight: NOTA: Nel caso sfortunato non possiamo usare le cellule auto-dimensionamento (per esempio, se il supporto per iOS7 è ancora necessaria) sposarsi devono implementare tableView (: heightForRowAt :) per calcolare ogni altezza della cella. E 'ancora possibile, anche se, per migliorare lo scorrimento esibizioni di: suggerimenti specifici per UICollectionView Siamo in grado di personalizzare facilmente la maggior parte del nostro punto di vista collezione attuando il metodo di protocollo UICollectionViewFlowLayoutDelegate appropriato. Calcola il tuo cellulare formato che possiamo personalizzare la nostra collezione dimensioni di visualizzazione delle cellule mediante l'attuazione di CollectionView (: il layout: sizeForItemAt :): UITableView estendere bordi sotto barra superiore 107 I sottoclasse SlackTextViewController a creare il mio UITableView, ma ha trovato che la vista tabella non è stata estesa sotto la barra di navigazione superiore. L'ispettore interfaccia utente di Xcode conferma anche questo. Mi chiedo come posso fare i bordi UITableViews si estendono sotto la barra di navigazione, in modo che il contenuto del Tableview può apparire attraverso la barra traslucida. Edit: Dopo aver esaminato il codice, ho scoperto che il problema sta in questo metodo Se la proprietà invertito è impostata su YES, la proprietà edgesForExtendedLayout viene automaticamente impostata su UIRectEdgeNone. Se ho rimosso questa linea la visualizzazione della tabella si sposterà verso l'alto. dapenggao cambiato il titolo da UITableView estendere bordi sotto barra in alto a UITableView estendere bordi sotto barra in alto, scorri per eliminare 22 gennaio 2015 dapenggao cambiato il titolo da UITableView estendere bordi sotto barra in alto, scorri per eliminare al UITableView estendere bordi sotto top bar 22 gennaio 2015

No comments:

Post a Comment