2014-09-18 17 views
6

sto utilizzando layout automatico,iOS 8 diverso comportamento: Autolayout con view.transform = CGAffineTransformMakeScale (0.5, 0.5), vista non è posizionato correttamente

Voglio fare un piccolo UISwitch e quindi utilizzare view.transform = CGAffineTransformMakeScale(0.5, 0.5) per realizzarla.

C'è un'altra vista sopra questo interruttore. leader di questa interruttore deve essere allineato al bordo principale di questo punto di vista, e non v'è uno spazio fisso verticale tra vista e l'interruttore, come seguente immagine:

enter image description here Viste sulla iOS7

Tuttavia, v'è aspetto diverso su iOS 8:

enter image description here Vista su iOS 8

sembra che i vincoli non vengono applicate a questo interruttore.

Ma ho chiamato self.view.layoutSubviews() e self.view.layoutIfNeeded()

Non funziona.

Come lasciare che questo interruttore sia sempre inserito nell'angolo in basso a destra della vista sopra?

qui non è Interruttore delle ridimensionati

enter image description here

+0

Auto non funziona con le trasformazioni strato –

+0

@MaxMacLeod Mi stavo chiedendo perché lo stesso codice ha un comportamento diverso su iOS7 e iOS8. Penso che tu intenda questa risposta [collegamento] (http://stackoverflow.com/questions/12943107/how-do-i-adjust-the-anchor-point-of-a-calayer-when-auto-layout-is- essere-usato/14105757 # 14105757), giusto? –

+0

Suppongo che si comporti in questo modo perché la dimensione intrinseca del contenuto di UISwitch rimane al valore predefinito w: 51px h: 31px nonostante la modifica della trasformazione della vista. Dovresti provare a sottoclassi l'UISwitch e sovrascrivere il metodo - (CGSize) intrinsicContentSize restituendo CGSizeMake (25.5f, 15.5f) –

risposta

0

Esistono due modi per andare qui: o UISwitch sottoclasse e cercare di applicare tutte le modifiche necessarie nella sottoclasse, oppure definire un nuovo UIView che include come sottoview un UISwitch modificato. La sottoclasse potrebbe essere la più veloce, ma è più complicata e rischiosa dal momento che UISwitch non era destinato a essere sottoclassi per questo tipo di modifica.

Supponendo si va via sottoclasse, ecco le modifiche è necessario effettuare:

  1. applicare la scala trasformare a self, ovviamente.

  2. override alignmentRectForFrame:, quindi restituisce super.alignmentRectForFrame: più la trasformazione di ridimensionamento.

  3. esclusione intrinsicContentSize, quindi restituisce super.intrinsicContentSize più la vostra scala trasformare

In sostanza, il numero 1 dovrebbe eseguire la trasformazione visiva reale. Ma 2 e 3 sono necessari per informare Auto Layout sulla dimensione della nuova vista, poiché per impostazione predefinita AL non è a conoscenza delle trasformazioni.

0

la trasformata di una vista che sta accadendo intorno al centro della vista, in modo che quando si chiama

view.transform = CGAffineTransformMakeScale(0.5, 0.5) 

Ha senso che sembra che questo in iOS 8, la ragione per cui si guarda bene in iOS 7 è probabilmente a causa di un bug in iOS 7.

tenta di modificare la costante del vincolo principale in questo modo:

self.switchLeadingConstraint.constant = -(self.mySwitch.bounds.size.width/4) 

In questo modo è possibile compensare sul filo del fuorigioco che si ha in iOS layout 8.

Problemi correlati