Domanda

Ho spostato una vista di avviso leggermente più in alto in modo da poter adattare anche una tastiera sullo schermo. Lo faccio semplicemente afferrando il frame dell'avviso e cambiando la Y dopo che ho già mostrato l'avviso in modo che le variabili del frame siano legittime. Funziona bene sul simulatore, ma quando lo faccio sull'hardware, l'avviso inizia nella posizione corretta ma poi salta quasi immediatamente alla sua posizione centrale verticale originale. La posizione di UIAlertView è una cosa fissa che non dovrebbe cambiare secondo le linee guida sull'usabilità o sto solo facendo qualcosa di sbagliato?

Grazie!

È stato utile?

Soluzione

Su quale SO stai provando questo? Ho capito che funziona sia sul simulatore OS 3.0 che sul dispositivo OS 3.0:

UIAlertView * alert = [ [ UIAlertView alloc ] initWithTitle:@"Alert" message:@"Alert" 
                        delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil ];

alert.transform = CGAffineTransformTranslate( alert.transform, 0.0, 100.0 );

[ alert show ];

CGAffineTransformTranslate accetta tre argomenti: la trasformazione esistente, una trasformazione xe una trasformazione y. Nell'esempio che ho usato, la vista di avviso appariva 100 pixel più alta di quanto sarebbe normalmente. Fai una prova e vedi cosa succede.

Inoltre, sono abbastanza sicuro che puoi modificare il frame prima di mostrare l'avviso poiché probabilmente imposta il frame dell'avviso in init in modo che sia il centro dell'intero schermo per impostazione predefinita.

Altri suggerimenti

Da quando iOS4 si sposta in UIAlertViews diventa complicato. Ho notato che se aggiungi una sottoview UITextField su UIAlertView, su iOS4 l'avviso viene spostato verso l'alto in modo che la tastiera non si sovrapponga. Questo non accade & Lt; iOS4.

Inoltre ho notato che il frame dell'avviso non è inizializzato anche dopo che è stato chiamato show, quindi non esiste un modo programmatico semplice per eseguire una trasformazione CGAffine relativa. L'unica soluzione sarebbe quella di effettuare trasformazioni condizionali basate sulla versione del sistema operativo.

Per me questo sembra sorvolare il comportamento non documentato di UIAlertViews che può essere modificato in qualsiasi momento. Non credo che Apple intendesse usare gli avvisi per qualcosa di più di testi e pulsanti (anche se le loro stesse applicazioni infrangono questa regola).

I for one inizierà a creare i miei avvisi personalizzati per questo tipo di scenari.

Non è un avviso destinato a essere modale - cioè: generalmente non eseguire qualsiasi altro input dell'utente mentre è attivo un avviso? In questo caso, perché dovresti avere visibilità sulla tastiera?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top