2015-03-30 13 views
27

Sto definendo uno standard UITableViewCell s in uno storyboard. Sto anche usando alcune delle celle di stile standard. Devo impostare i vincoli in modo che le mie celle personalizzate corrispondano a quelle definite dalla piattaforma (i loro titoli sono allineati correttamente a sinistra).Corrispondenza allineamento a sinistra dei tipi UITableViewCell standard e personalizzati

Ho notato che l'allineamento a sinistra delle celle cambia tra le versioni iOS e il dispositivo su cui è in esecuzione. Lo sembra come l'allineamento a sinistra è uguale alla cella predefinita separatorInset.

Ecco UITableViewCell s separatorInset per alcuni dispositivi e le versioni iOS:

  • iPad il 7 - 15 punti.
  • iPad su 8 - 20 punti.
  • iPhone su 7 - 15 punti.
  • iPhone su 8 - 16 punti.

Altri dispositivi (iPhone 6+, iPad Mini) potrebbero essere diversi: non ho controllato in modo esaustivo.

Come procedere assicurando che le celle personalizzate e le celle incorporate abbiano lo stesso allineamento a sinistra delle etichette?

Esiste un modo ragionevole per ottenere questi valori predefiniti di inserimento e utilizzarli in vincoli di layout automatico impostati in uno storyboard? Che ne dici di codice?

risposta

33

ho avuto lo stesso problema, ma l'altra risposta non poteva aiutarmi come stavo usando cellule statiche in UITableViewController. Dopo alcuni tentativi ed errori, ho finalmente trovato un modo per risolvere il problema separatorInset su iPhone 6+ senza una singola riga di codice.

enter image description here

semplicemente allineare il bordo sinistro del UILabel con valore 0 [contenuti (distanza corrente = 0)] dal margine sinistro. E cambia anche la posizione X di UILabel per ottenere 0. (Nel mio caso, in Interface Builder, il margine era 7, UILabel's X = 8). L'allineamento funziona bene su iPhone 4S, 5S, 6 e 6+.

MODIFICA: modificato in XCode 7. Passaggio aggiuntivo: imposta "Mantieni margini Superview" del rispettivo cella TableViewCell e il suo contentView su TRUE o selezionalo in IB -> Impostazioni dimensioni. Fare riferimento alla risposta di @ tebs1200.

Spero che questo aiuti.

+0

Grazie - Sono tornato a questo solo negli ultimi giorni, quindi mi check this out. – Benjohn

+0

* QUESTA * è l'unica risposta corretta. Cosi 'semplice. Grazie! –

+1

Questo ha funzionato per me fino a quando ho messo il mio UITableView in un controller figlio che non era a filo con il lato sinistro dello schermo. In tal caso, il margine della cella personalizzata è troppo piccolo. Commenterò di nuovo se riesco a trovare una risposta. –

2

In iOS 8 Apple ha introdotto layoutMargins

È possibile impostare nel vostro storyboard o sul vostro codice semplicemente in questo modo:

cell.layoutMargins = UIEdgeInsetsZero // change by your custom value 

Prima di ciò, è necessario impostare preservesSuperviewLayoutMargins a NO-evitare il cella dall'ereditarietà delle impostazioni dei margini della Visualizzazione tabella

preservesSuperviewLayoutMargins: Un valore booleano che indica se la vista corrente rispetta anche i margini della sua superview.

Spero che questo può aiutare;)

7

Che cosa ha funzionato per me è stato l'aggiunta di queste 2 righe alla mia abitudine UITableViewCell implementazione:

self.preservesSuperviewLayoutMargins = YES; 
self.contentView.preservesSuperviewLayoutMargins = YES; 
// ... add test view to content view... 

Poi ho usato Layout Automatico con la spaziatura di default:

[self.contentView addConstraints:[NSLayoutConstraint 
    constraintsWithVisualFormat:@"H:|-[testView]-|" options:0 metrics:nil 
    views:@{@"testView":testLabel}]]; 

[self.contentView addConstraints:[NSLayoutConstraint 
    constraintsWithVisualFormat:@"V:|-[testView]-|" options:0 metrics:nil 
    views:@{@"testView":testLabel}]]; 
+0

Grazie - Sono tornato a questo solo negli ultimi giorni, quindi controllerò questo. – Benjohn

+0

Questo è quello di cui avevo bisogno! Anche se ho impostato la proprietà 'preservesSuperviewLayoutMargins' nella finestra di ispezione delle dimensioni. – dontangg

+0

Per renderlo perfettamente allineato, ho anche impostato 'preservesSuperviewLayoutMargins = YES' per la vista tabella. –

27

è possibile implementare la soluzione suggerita da Mark nello storyboard:

  1. Assicurati che la cella personalizzata sia selezionata.

    Table View Cell selected in view tree

  2. Assicurarsi preservare i margini Superview è selezionato nel formato ispettore

    'Preserve Superview Margins' selected in the Size inspector

  3. Ora seleziona la cella contenuti

    enter image description here

  4. assicurarsi preservare i margini Superview è selezionato anche qui (vedi immagine al punto 2.)

  5. Selezionare l'etichetta (o altra vista) nel prototipo di cella personalizzato.
  6. Limita il margine sinistro pixel dal margine.

    enter image description here

Problemi correlati