2013-06-10 9 views
22

In uno dei video WWDC 2012, Layout automatico per esempio, viene dimostrata un'app OS X utilizzando Autolayout e, a circa 7 o 8 minuti, mostra come una singola vista, è possibile deselezionare una casella nell'Inspector degli attributi e la casella è chiamata qualcosa come "Traduce la mascheratura automatica nei vincoli". Ora, sono a conoscenza dell'equivalente di codice di questa scatola, lo si traduce in "AñoresizingMaskIntoConstraints" booleano, ma non riesco a trovare questa casella di controllo ovunque nei progetti iOS o OS X. Il mio progetto utilizza Autolayout. Mi piacerebbe molto questa casella di controllo, perché una delle cose che sto affrontando nell'apprendimento di Autolayout (e la conversione di un'app molle/struts in AL) sono i milioni di vincoli che Xcode ha generato per ogni vista e come pulirli e ridefinire sensibilmente alcuni/tutti in codice. Quello che mi piacerebbe fare questa conversione una vista alla volta è di disattivare quei vincoli generati automaticamente.Dove si trova la casella di controllo Xcode "Trasforma la maschera di ridimensionamento automatico in vincoli"

Perché non riesco a vedere questa casella di controllo? Sto usando Xcode 4.6.

risposta

25

Questa casella di controllo è disponibile in Interface Builder (IB), ma solo se si stanno sviluppando progetti Cocoa destinati a OS X. Per iOS, al momento non è disponibile. Puoi solo impostarlo a livello di codice.

Layout Automatico su iOS dalla mia comprensione - e gli altri si sentono liberi di piantare qui - non è un'implementazione completa di ciò che è disponibile su OS X.

Per essere onesti, dato quello che dici dopo, questa casella di controllo è probabilmente qualcosa di cui non devi preoccuparti. Penso che sia importante per l'aggiornamento dei progetti di OS X su Auto Layout, ma generalmente per iOS è improbabile che si mischi l'uno e l'altro. Ad esempio, puoi spuntare il tuo Xib in File Inspector in "Use Autolayout" o non farlo.

enter image description here

Detto questo, c'è un caso d'uso in cui potreste aver bisogno di pasticciare con quella bandiera. Questo è se si desidera creare un file Xib autonomo per una vista e quindi caricarlo a livello di programmazione utilizzando loadNibNamed. Quando lo si fa, per default i vincoli di ridimensionamento automatico del vecchio stile vengono convertiti in nuovi vincoli di layout automatico. In genere voglio aggiungere il mio, così ho impostato quella bandiera per zapparli.

myView.translatesAutoresizingMaskIntoConstraints = NO

In ogni caso questa è un'altra storia.

Ecco il link per maggiori informazioni, anche se hai senza dubbio ha avuto uno sguardo già:

Adopting Auto Layout

Una cosa che vorrei dire è che se stai lottando con layout Auto in l'inizio - e tu non saresti umano se tu non lo fossi, lo siamo stati tutti - quindi mi terrei con Interface Builder e penserei alle regole d'oro. Il più importante per me è che odia l'ambiguità. È come un vuoto in natura. Prima di poter eliminare il vincolo che non si desidera, è necessario aggiungere uno che si desidera quindi zappare quello vecchio.

L'altro errore che ho commesso è stato il mix di layout automatico e frame. Quindi farei del codice che ha controllato la larghezza del frame, quindi lo applichiamo ai vincoli. Brutto errore Questo finisce davvero in lacrime. Quando entri in Auto Layout è fondamentale dimenticare di fare qualsiasi cosa con CGRect, frame, ecc.

Tuttavia, attaccalo. Inizia con alcune semplici viste in IB e sperimenta. C'è un metodo per la pazzia, davvero.

Un altro collegamento anche la pena di guardare IS:

10 Things You Need To Know About Cocoa Autolayout

+0

Wow, grazie mille Max, per la risposta dettagliata e chiara. Sono ancora un po 'confuso sul motivo per cui dici che potresti non averne bisogno durante la conversione di un progetto iOS. Voglio solo che io possa fare una conversione parziale passo dopo passo in AL. Voglio dire, se non è lì non c'è, ma è una di quelle situazioni in cui mi sto chiedendo perché sarebbe stato esplicitamente escluso dal kit di sviluppo iOS, e più precisamente dal motivo per cui altri sviluppatori non si sarebbero lamentati .. .ie Mi chiedo se mi manca il punto da qualche parte ... – bobsmells

+0

probabilmente perché in iOS si aspetta che tu usi AL quasi esclusivamente in IB, molto probabilmente usando le story board. Caricamento stand alone vista Xibs a livello di codice con loadNibNamed è probabilmente considerato da Apple per essere molto meno comune. Come è stato avviato il tuo progetto? Avete controller di vista standard con viste associate o state usando loadNibNamed? –

+0

Ho dei VC standard con viste associate. Sto usando un componente di terze parti (iCarousel-https: //github.com/nicklockwood/iCarousel) e questo fornisce un gancio per fornire la tua vista per ogni pannello, tramite un metodo simile a cellForRowAtIndexPath quando si tratta di tabelle. Il problema è che la vista mi viene restituita da quel metodo, il che significa che non lo aggiungo mai alla sua superview, il che significa che non ho la possibilità di aggiungere vincoli. Ovviamente potrei scavare nel codice iCarousel e farlo in quel modo, ma sicuramente mi manca qualcosa ... non dovrei essere in grado di usare un framework come una scatola nera? – bobsmells

Problemi correlati