UIView Risorse ridimensionamento automatico
-
22-09-2019 - |
Domanda
Ho lavorato su un ridimensionamento automatico UIView personalizzato e Apple ha ben poco da dire su questo. Cosa c'è di più, in base a SO di feedback, la documentazione di Apple è in realtà sbagliato in alcune aree. Infine, anche se ci sono sei componenti di ridimensionamento in Interface Builder e sei per setAutoresizingMask:
non sembrano correlare a tutti. Ad esempio, impostando la molla larghezza in IB ha un effetto diverso da impostando il autoresizingMask
di UIViewAutoresizingFlexibleWidth
durante la rotazione del dispositivo.
Ci sono buone risorse per imparare come il ridimensionamento delle opere su iPhone?
Modifica
ho capito i concetti di base di Apple usi come contentMode, e ho letto attraverso la documentazione UIView. Sto cercando qualcosa che spiega un po 'più a fondo quali sono le impostazioni IB fare in termini di ciò che è disponibile nel SDK di programmazione.
Soluzione
impostando il autoresizingMask
a UIViewAutoresizingFlexibleWidth
, equivale a impostare la molla larghezza, oltre sia a sinistra che puntoni giuste Interface Builder (puntoni significano che il bordo è non flessibile). Se si voleva replicare il comportamento di impostare solo la primavera di larghezza, ma non i montanti sinistro e destro, si dovrebbe impostare autoresizingMask
a UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin
Altri suggerimenti
Ho trovato questo post utile per capire iOS il ridimensionamento automatico.
http://www.techotopia.com/index.php/IOS_4_iPhone_Rotation,_View_Resizing_and_Layout_Handling
da Apple:
... specificare il valore di questa maschera combinando le costanti descritte in UIViewAutoresizing utilizzando l'operatore OR C. La combinazione di questi costanti consente di specificare quali dimensioni della vista devono crescere o ridursi rispetto al superview. Il valore predefinito di questa proprietà è UIViewAutoresizingNone, che indica che la vista non dovrebbe essere ridimensionata a tutti.
... Per esempio, supponiamo che questa proprietà comprende l'UIViewAutoresizingFlexibleWidth e UIViewAutoresizingFlexibleRightMargin costanti ma non include la costante UIViewAutoresizingFlexibleLeftMargin, indicando così che il larghezza del margine sinistro della vista è fisso ma che la vista della margine larghezza e destra può cambiare. Così, la vista appare ancorato il lato sinistro del suo superview mentre sia la larghezza vista e il divario alla destra dell'aumento di vista.
Se i comportamenti ridimensionamento automatico non offrono il layout preciso che si necessità di vostri punti di vista, è possibile utilizzare una vista contenitore personalizzato e di override il suo metodo layoutSubviews per posizionare i vostri subviews più preciso.
Quindi, se si desidera posizionare una vista ancorata al lato superiore e destro del suo superview, si potrebbe applicare una maschera del tipo:
[myView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin];
superview ha tali parametri come contentMode e autoresizesSubviews , wich tutto con autoresizingMask dei suoi subviews rende ridimensionamento comportamento
Per la cronaca, ho graffiato la mia testa per un'ora perché la mia sola riga UILabel solo sarebbe non auto-regolare la dimensione del carattere per adattarsi larghezza. Infine, questo ha fatto il trucco:
label.contentMode = UIViewContentModeScaleAspectFit;
Ho cercato su google e nessuno sembra per chiarire questo dettaglio (tutti ti dice l'etichetta deve essere 1 riga, impostare adjustsFontSizeToFitWidth / minimumFontSize etc.). Forse il valore predefinito di questa proprietà è cambiato? Sono su iOS 4.3.