2013-10-30 23 views
11

Iniziare a passare dal layout di molle e strutture al layout automatico e avere alcune domande relative all'impostazione "Dimensioni intrinseche".Qual è la differenza tra le dimensioni intrinseche e i vincoli di larghezza/altezza del sistema?

Se si imposta "Dimensione intrinseca" di alcune viste su "Segnaposto" e si impostano alcuni valori di larghezza e altezza, la vista non verrà ridimensionata e rimarrà della dimensione fissa. Ma se impostiamo "Dimensione intrinseca" su "Predefinito (definito dal sistema)", il sistema deciderà e ridimensionerà la vista se necessario durante il runtime.

Tuttavia, è possibile impostare in modo esplicito i vincoli di sistema di larghezza e altezza nella vista utilizzando Ctrl + trascinamento. In tal caso ci sarebbero limiti di larghezza e altezza del sistema E valori di segnaposto const. Sto rivedendo il codice esistente e sto cercando di capire che si tratta di un errore e che i limiti di larghezza e altezza del sistema ridondanti devono essere rimossi OPPURE c'è qualche altra logica nascosta. Tuttavia, Xcode non mostra alcun avviso ed ecc in console durante il runtime. Ecco una schermata di stampa del progetto demo:

enter image description here

risposta

26

Quando si imposta la dimensione intrinseca alla "segnaposto", si indica al sistema di layout Xcode che la vista avrà dimensioni dipende dal suo contenuto (come un etichetta può essere dipende dal suo contenuto testuale). Il sistema conosce e mantiene solo i propri tipi di viste con dimensioni intrinseche. Se desideri avere un'esperienza simile con una tua visione personale, considera la vista come se avesse una dimensione intrinseca. Quindi imposti i vincoli come se la vista dovesse aumentare o diminuire a seconda del suo contenuto. Infine, si implementa il metodo intrinsicContentSize per calcolare e restituire la dimensione corretta del contenuto. Se il contenuto cambia e deve essere eseguito un nuovo calcolo, chiami invalidateIntrinsicContentSize sulla tua vista. A seconda di come sono stati impostati i vincoli, la vista crescerà e/o si restringerà, oppure sarà statica (come se fosse possibile impostare un vincolo di larghezza e altezza su un'etichetta e rimanga statica).

+0

Hmm, l'impostazione di "Segnaposto" con larghezza e altezza personalizzate non ha scalato UILabel rispetto al suo contenuto ("dipendente dal suo contenuto"). – Centurion

+0

Se si aggiungono i vincoli di larghezza e altezza, non ridimensiona l'etichetta. –

+0

Ho appena creato un nuovo progetto e aggiunto un'etichetta con una cornice più grande. Quindi impostare "Segnaposto" e selezionare "Nessuno" nelle caselle di controllo larghezza e altezza. Non è successo nulla e l'etichetta non è stata ridimensionata per adattarsi al suo contenuto. Non ho stabilito alcun vincolo. – Centurion

1

se si ha familiarità con wrap_content da Android, il intrinsicContentSize è uguale a wrap_content.

0

Ogni vista che contiene contenuto può calcolare la dimensione del contenuto intrinseco. La dimensione intrinseca del contenuto viene calcolata da un metodo su ogni istanza di UIView. Questo metodo restituisce un'istanza CGSize

Problemi correlati