2014-09-24 10 views
13

Qualcosa è successo con i nostri separatori di celle con vista tabella su iPhone 6 Plus. Ho creato un progetto di prova vuoto con una cella personalizzata con una sola etichetta e un vincolo di 15pt sul bordo anteriore.Qualcosa non va con il tavolo di iPhone 6 PlusView.separatorInset

iPhone 5S

Etichetta e separatore sono 30 px (15pt) dal bordo anteriore. Va tutto bene.

iPhone 5S

iPhone 6 Plus

Label è 48 px (15pt) dal bordo anteriore e il separatore è 60px (20pt) dal bordo anteriore.

iPhone 6 Plus

Se entro il tableView.separatorInset E '15pt su iPhone 5S e 20pt sul 6 Plus. Impostando manualmente l'inserto su 15 sul 6 Plus non funziona.

Inviare assistenza.

+0

Sto avendo lo stesso problema, anche dopo i recenti iOS 8.1.1 aggiornamento. La cosa strana è che ciò accade solo su celle di visualizzazione tabella personalizzate. – zgosalvez

+0

Provato su un iPad e succede anche. – zgosalvez

+0

Qualche soluzione trovata? Ho lo stesso problema. – Sam

risposta

6

Override layoutMargins metodo nella classe cella personalizzata.

- (UIEdgeInsets)layoutMargins 
{ 
    return UIEdgeInsetsMake(0, 15, 0, 0); 
} 
+0

Qual è il modo migliore per farlo senza un numero di codice fisso? – Sam

+0

Un modo migliore è disabilitare il separatore e aggiungere una vista personalizzata come separatore. – Vidyalaxmi

+0

Per il modo corretto di farlo, controlla [questo post] (http://stackoverflow.com/questions/27420888/uitableviewcell-with-autolayout-left-margin-different-on-iphone-and-ipad).Il motivo per cui questo è il modo corretto è perché rispetta il margine sinistro più grande di un dispositivo più grande come 6 Plus o iPad. Apple ha impostato il margine per essere più grande per un motivo, quindi sembra migliore e le app dovrebbero rispettarlo. – yilin

1
Non

una soluzione perfetta, ma ha funzionato per me.

@IBOutlet weak var leftViewLeadingConstraint: NSLayoutConstraint! 

override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 
    switch UIScreen.mainScreen().scale { 
    case 2: 
     leftViewLeadingConstraint.constant = 7.0 
    case 3: 
     leftViewLeadingConstraint.constant = 11.0 
    default: 
     assertionFailure("Error: wrong scale value") 
    } 
} 
+0

Non so perché questa risposta non abbia ottenuto voti. Ha funzionato perfettamente per me! Ho regolato il vincolo bordo di entrata nel metodo layoutSubviews nel mio sottoclasse UITableViewCell se la scala è 3, e nella Storyboard, ho specificato il vincolo che porta bordo per avere un valore di 12 (credo 11 è sbagliato) se la classe dimensionale è regolare larghezza x Qualsiasi altezza. – Blip

1

ho risolto da questa soluzione: http://qiita.com/mono0926/items/42f7a344b39e946abfe2

Get tableView.separatorInset.left valore quando viewDidLayoutSubviews chiamato.

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    notificationLabelLeft.constant = tableView.separatorInset.left 
} 
2

Se si utilizza uno storyboard, selezionare la tabella View attributi ispettore. Modificare il

separatore incasso

a

personalizzato

e lasciare il default il margine sinistro come 15.

+0

Per IOS 9, questa soluzione ha funzionato per me. Stavo usando una cella personalizzata che conteneva un'etichetta con un vincolo di 15pt sul bordo anteriore. Il vincolo di 15pt ha funzionato benissimo con tutti gli iPhone tranne con iPhone 6+ e iPad (l'etichetta non era allineata con il separatore di tableview). Questa soluzione però risolve il problema. Grazie! – xNightxOwl

+0

Funziona anche su iOS 8. La soluzione più semplice per me. – Tuslareb

0

Basta rendere falso questa opzione della tabella e funzionerà allo stesso modo su tutti i dispositivi, specialmente su iPad.

cellLayoutMarginsFollowReadableWidth = false 
Problemi correlati