2015-04-18 29 views
8

XCode 6.3/Swift 1.2 ha aggiunto margini aggiuntivi al contenuto di UITableViewCell? Prima dell'aggiornamento, avevo un UIView personalizzato che si estendeva su tutto lo schermo nelle mie celle. Esempio:XCode 6.3 aggiunta di margini a tableviewcell

enter image description here

Ora, tutto ciò che nella cella sembra avere margini aggiuntivi che non ho idea da dove sono venuti.

enter image description here

Si noti che le larghezze di questi View non sono alterati in alcun modo nel codice e destra e sinistra sono vincolati, come di seguito:

enter image description here

Si noti inoltre che sto usando tableView.separatorStyle = .None. Aggiungo questo fatto perché per qualche motivo in uno dei miei tableView s che ha il separatore predefinito, non sembra che aggiunga questi margini aggiuntivi.

Qualcuno sa se hanno fatto qualche strano cambiamento in XCode 6.3? Questo comportamento si è verificato direttamente dopo l'aggiornamento.

Edit: enter image description here

+0

Stavo eseguendo questa app su iOS 8 prima dell'aggiornamento e sembrava il primo screenshot. – ad121

+0

Non so cos'altro posso aggiungere. L'ho appena testato con vincoli -16 su ciascun lato e si espande correttamente sullo schermo, ma non sono a conoscenza del motivo per cui i miei margini sarebbero stati spostati (non voglio usare una correzione bandaid senza conoscere la causa come questa) . Ho stampato la larghezza di contentView, view, tableView e cella stessa e sono tutti 375 su iphone 6, ma il blocco blu è di 359 larghezza con i vincoli indicati nella domanda. – ad121

+0

Ma perché hai posto i limiti ai margini in primo luogo? Rendili ai bordi effettivi della visualizzazione del contenuto, quindi le modifiche al margine non influiranno su di te. Mi rendo conto che non risponde alla domanda di root, ma partendo dal presupposto che i margini saranno 8 e impostando i vincoli a -8 per compensare è stato piuttosto noccioso iniziare con. – matt

risposta

19

Guardate attentamente questo screenshot della finestra di ispezione formato per un vincolo importante:

enter image description here

Vedere come "Rispetto al margine" è selezionata? Questo è il tuo problema. Se il margine cambia, il tuo bordo sinistro cambia. Deselezionare la voce di menu e quindi impostare la costante su zero. Fallo anche per il vincolo finale, e i tuoi problemi saranno finiti.

Ora affrontiamo il problema più profondo: cosa è cambiato? Hai assolutamente ragione, qualcosa ha fatto. Credo che abbiano corretto un bug e che tu sia rimasto intrappolato nella correzione. La registrazione mi mostra che la cella preservesSuperviewLayoutMargins è true e che i margini della tabella sono 0,16,0,16. Questo è vero anche su iOS 8.2, quindi i margini effettivi su iOS 8.2 dovrebbero essere 16. Tuttavia erano 8, come se preservesSuperviewLayoutMargins fossero false. Ma in iOS 8.3, questa impostazione è rispettata correttamente - con il risultato che hai osservato.

Così, un'altra modo per risolvere il problema sarebbe stato quello di lasciare i vostri vincoli come sono, ma per impostare di preservesSuperviewLayoutMargins-false in cellForRowAtIndexPath: ogni cella. Questo funziona ugualmente bene per rendere il risultato identico in entrambi i sistemi.

EDIT Buone notizie: sembra che questa modifica sia stata ripristinata in iOS 9. Quindi, senza modifiche, le tue celle sarebbero state le stesse in iOS 9 come in iOS 8.2 e precedenti.

+0

Modificato per spiegare il fenomeno sottostante: avevi assolutamente ragione, i margini sono cambiati! Grazie mille per averlo indicato. – matt

+0

..questo è stato un po 'di debug impressionante! Ho dovuto rivedere tutti i vincoli della cella vista tabella. Questo ha risolto tutti loro. Grazie. – nmdias

+0

Sei davvero stato catturato dai nuovi vincoli basati sui margini di Apple. Quando si crea un vincolo inizialmente usando il controllo-trascinamento, sarà basato sul margine _non si tiene premuto il tasto Opzione_ per ottenere la variante senza margini. Pertanto, i vincoli basati sul margine sono una tecnologia di opt-out; tu puoi rinunciare, ma la maggior parte della gente non lo saprà e finirà per usarli senza nemmeno rendersene conto. – matt

Problemi correlati