2013-05-13 5 views
10

Dispone di una cella di tabella personalizzata con il proprio .XIB e .h e .m. Niente di troppo elegante. Quando il dispositivo ruota, la larghezza della cella non cambia. Viene chiamata la cella delle tabelle per il percorso dell'indice, ma la larghezza non cambia (diciamo da verticale a orizzontale). Cosa potrebbe impedirlo?La cella di tabella personalizzata IOS non ridimensiona automaticamente la larghezza per la modifica dell'orientamento

Non si desidera impostare manualmente la dimensione del frame.

Inserirà il codice se necessario, ma forse possiamo rispondere con il codice su questo.

Anche se l'avvio dell'applicazione in orizzontale non imposta anche la larghezza maggiore per la cella.

[Aggiunta]

Inoltre non funziona con cellule non-custom.

self.tableViewSelection.autoresizesSubviews = true; 
self.tableViewSelection.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
self.view.autoresizesSubviews = true; 

XIB per la tabella ha il ridimensionamento sembrava essere configurato correttamente (supporto non IOS6).

+0

Alcune schermate potrebbero essere utili. È difficile dire qui cosa non viene ridimensionato. – matt

+0

Sono d'accordo, ma questa domanda non mi interessa più adesso. Possiamo rimuoverlo se il moderatore lo desidera. – ort11

risposta

1

La cella avrà automaticamente la stessa larghezza della vista tabella. Quindi quello che non sta ridimensionando potrebbe essere la vista tabella. È necessario fornire i vincoli appropriati (se si utilizza l'Autolayout, il valore predefinito in iOS 6) o la maschera di autoresizing (altrimenti) in modo che venga ridimensionata in risposta al ridimensionamento della vista di livello superiore per compensare la rotazione del dispositivo.

+0

Sì, è così che dovrebbe accadere. Per qualche ragione in questo progetto non lo è e sta cercando di capirlo. Provato sopra hard code senza fortuna. Suppongo che la dimensione corretta della cella sia impostata dalla vista tabella dopo (cella per indice) e prima (cella verrà visualizzata). – ort11

+0

Refactored un po 'e funziona bene ora. Non sono sicuro di cosa fosse. – ort11

1

Ho anche affrontato questo stesso problema mentre autorizzava le celle personalizzate in rotazione. Dopo aver combattuto, ho ottenuto la soluzione autorizzando cell.contentView, perché sto aggiungendo le mie viste come sottoview in cell.contentview.

Ho usato seguente codice e il mio codice funziona bene :)

cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; 
+0

Quello che hai menzionato è corretto, ma le maschere di autoresizing dovrebbero essere impostate in questo modo: (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight). Anch'io ho avuto lo stesso dubbio che hai menzionato nel tuo codice, quindi ho inserito una domanda in SO e puoi visualizzarlo per tuo riferimento: http://stackoverflow.com/questions/7754851/autoresizing-masks-programmatically-vs-interfact -builder-xib-nib –

+0

Questo codice non funziona più da Swift2. Tutte queste costanti finiscono con identificativi irrisolti. – zeeple

7

Se si sta ignorando l'layoutSubviews o un altro metodo, non dimenticate di chiamare è super:

override func layoutSubviews() { 
    //... 

    super.layoutSubviews() 
} 
Non

fare questo si tradurrà nel problema che stai affrontando.

1

per SWIFT 2, sarà:

cell.contentView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
0

a Swift 4, le opere qui sotto.

cell.cellUIView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 

Nota:cellUIView è un UIView ho aggiunto alla contentView delle cellule prototipo.