2011-05-02 15 views
12

Come è possibile ottenere in modo programmatico l'altezza predefinita di un'istanza UIPickerView, in base alla risoluzione e all'orientamento del dispositivo su cui è attualmente in esecuzione l'app?Altezza UIPickerView predefinita

Mi piacerebbe non utilizzare un valore con hardcoded per questo parametro, nel caso in cui i nuovi dispositivi supporteranno risoluzioni dello schermo diverse e determineranno quindi questo componente con una diversa dimensione predefinita.

+0

Si potrebbe utilizzare la proprietà intrinsicContentSize.height su UIPickerView – killianke

risposta

1

Se si crea un'istanza con altezza pari a 0, verrà sovrascritta con l'altezza predefinita appropriata e sarà possibile ottenere il valore frame.size.height.

Tuttavia, su iPad questo emetterà un avviso (testato alcuni giorni fa). Alla fine ho dovuto usare valori hardcoded per iPad ...

P.S. Questo era per un UIDatePicker; non sono sicuro se sia la stessa identica cosa per UIPickerView.

+0

Esiste un modo possibile che non emettere avvertimenti? Sembra piuttosto hacky ricorrere a una coercizione di sistema per aggiungere un componente che si consiglia di avere una dimensione predefinita. – luvieere

+0

Solo per chiarimenti, questo "avvertimento" che ho citato è semplicemente un messaggio che il sistema stampa sulla console. Questo avviso include l'altezza predefinita suggerita, che era il valore hardcoded che ho terminato impostando sul mio codice. Se lo fai, non ricevi alcun avvertimento. Come ho detto, se imposti il ​​valore predefinito su 0 (e poi leggi il valore impostato dal sistema) non riceverai questi avvisi su iPhone/iPod, è solo su iPad. –

+0

Ho ricevuto i messaggi di avviso anche su iPhone, su iOS 4.2, informandomi che la dimensione del controllo è stata impostata per default alle sue dimensioni corrette. – luvieere

-1

È possibile utilizzare la proprietà frame di uipickerview.

15

L'avviso che André ha visto non sembra più avvenire (XCode 4.2; iOS SDK 5.0). Se si crea con initWithFrame e dare un'altezza pari a zero, è possibile leggere di nuovo è l'altezza dalla proprietà frame.height:

uiPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 77, 320, 0)]; 
DLog(@"uiPickerView=%@",uiPickerView); 

dà:

uiPickerView=<UIPickerView: 0x9a28c40; frame = (0 77; 320 216); layer = <CALayer: 0x9a28d00>> 

Quindi 216 è l'altezza di default.

Non riuscivo a trovare una definizione per questo nelle intestazioni, quindi leggerlo di nuovo sembra essere il modo più sicuro.

È possibile impostare un frame con un'altezza diversa da zero, ma Apple dice di non farlo e sembra causare problemi di rendering.

+0

su un iPhone in verticale, 216 è ancora corretto (a partire da iOS 10 e iPhone 7). In landscape, tuttavia, è 162 quando stampo il frame. – user1687195

0

Con layout automatico mi stavo chiedendo lo stesso a causa del fatto che non si può pin in fondo a esso.

L'altezza di default senza modifiche a un UIPickerView è 216px** UIPickerView**