2014-04-07 20 views
5

In un UIToolbar, ho aggiunto un UITextField al centro della barra (che viene aggiunto come UIBarButtonItem) con un altro UIBarButtonItem (pulsante di azione) accanto ad esso. Ho aggiunto elementi di barra della barra spaziatrice flessibile molto a sinistra e molto a destra. Ha un bell'aspetto nel ritratto, ma quando ruoto in orizzontale lo centra e sembra ok, ma ho bisogno che il campo di testo venga allungato per riempire la larghezza e spingere l'ultimo pulsante a destra - esattamente come fa nei messaggi - su iPhone e iPad.Regola la larghezza di UITextField per riempire la barra degli strumenti in orizzontale

Pensavo che il layout automatico avrebbe funzionato, ma Apple afferma che non è possibile creare vincoli per UIBarButtonItem s. E infatti quando seleziono uno qualsiasi dei pulsanti della barra o del campo di testo non consentirà di creare alcun vincolo.

Potrebbe per favore fatemi sapere come realizzare questo? Grazie!

enter image description here

EDIT: Ho provato un paio di altre combinazioni con spazi flessibili fisso /. Quando io non aggiungo alcun, il campo di testo e pulsante di condivisione sono spinti verso sinistra:
enter image description here

Se invece lo faccio spazi fissi, sembra esattamente lo stesso come sopra, con 0 larghezze, o se ho impostato una larghezza quindi ovviamente li spingerà. L'ultimo spazio all'estrema destra non ha alcun effetto: non è fissato contro il lato destro in modo che vada fuori dallo schermo.

Ho provato uno spazio fisso a sinistra e uno flessibile a destra, con quello centrale fisso (o nessuno centrale), e sembra lo screenshot in alto. Poi ho cambiato quello centrale di flessibilità e si è scoperto in questo modo:
enter image description here

se cambio il primo a flessibilità, nessuno in mezzo (o se aggiungo una fissa), e flxed sulla destra, viene spostato verso destra:
enter image description here

Se il primo è flessibile, centrale è flessibile, e proprio è fissato, questo è come appare:
enter image description here

In tutti i casi la larghezza della il campo di testo rimane lo stesso valore statico e come è stato originariamente impostato nello storyboard. Penso che il problema è che quando si imposta la larghezza trascinando il fotogramma, non ci sono linee guida blu per lo snap in modo che rimanga sempre la stessa larghezza.

Ho perso nessuna combinazione di spazi? Se non riesco a implementare il comportamento desiderato nel generatore di interfacce, come si può ottenere ciò nel codice?

risposta

9

Per ottenere un campo di testo che si estende in senso orizzontale, ho dovuto impostare manualmente il suo frame in viewWillAppear e anche quando cambia l'orientamento - ho usato viewWillTransitionToSize:withTransitionCoordinator::

[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> __nonnull context) { 
    self.textField.frame = CGRectMake(0, 0, self.navigationController.navigationBar.frame.size.width - self.actionButton.width - 55, self.inputTextField.frame.size.height); 
} completion:^(id<UIViewControllerTransitionCoordinatorContext> __nonnull context) { 
}]; 


soluzione precedente (non lavora più per me in tutti i sistemi operativi):

Aggiungere questo viewDidLoad:

self.textField.autoresizingMask = UIViewAutoresizingFlexibleWidth; 

enter image description here

+0

non funziona per me in Xcode 6.2/iOS 8: l'UITextField rimane una dimensione fissa, in modo che la barra degli strumenti è tagliato fuori in dimensioni compatte e non è sufficientemente ampia nella dimensione regolare. – 7stud

+0

Ho capito perché non ha funzionato * per me: stavo guardando i risultati in Anteprima, dove puoi guardare sia un iPhone che un iPad allo stesso tempo, vedi qui (ignora il fatto che dice Swift: il tutorial non ha nulla a che fare con Swift): https://www.youtube.com/watch?v=p5wD8dvSDbM. Apparentemente l'anteprima mostra solo ciò che hai fatto in IB, quindi Anteprima non può vedere il codice nella risposta. Di conseguenza, in Anteprima il mio campo di testo non si allungava, ma quando eseguivo il mio codice (Run'ed ?!) contro vari dispositivi (fai clic sul dispositivo nella barra di scorrimento a destra del pulsante Stop e scegli un altro dispositivo), ... – 7stud

+0

... TextField si dimensiona per adattarsi allo spazio disponibile. Grazie! – 7stud