2014-09-21 6 views
5

La modifica dell'altezza della tastiera personalizzata è semplice in base a documentation. Ecco la versione Swift-equivalente di codice riportato nella documentazione di AppleEstensione applicazione app per tastiera iOS 8 - Modifica altezza per l'orientamento

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    let constraint = NSLayoutConstraint(item: self.view, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0.0, constant: 400.0) 
    self.view.addConstraint(constraint) 
} 

Questo funziona, ma cambia l'altezza a un valore costante che non è auspicabile se si cambia l'orientamento del dispositivo. Impostare l'altezza della tastiera su 400.0 potrebbe andare bene in modalità verticale, ma probabilmente non sarà appropriato in modalità orizzontale. Ad esempio: la dimensione di visualizzazione della tastiera standard per un iPhone 5 è 320,216 in verticale e 568,162 in orizzontale. L'impostazione di un'altezza costante cambia le dimensioni della vista da tastiera a 320.400 in verticale e 568.400 (che è effettivamente l'intero schermo) in orizzontale.

Il mio unico pensiero al momento è quello di creare un dizionario contenente le dimensioni della vista della tastiera per ogni tipo di dispositivo e ciascun orientamento, quindi aggiornare il vincolo di altezza costante ogni volta che il dispositivo cambia orientamento. Qualcuno ha trovato una soluzione più elegante?

+0

Cerchi la stessa risposta anche tu – honcheng

risposta

2

L'ho eseguito implementando willAnimateRotationToInterfaceOrientation: nel controller di visualizzazione della tastiera. In teoria dovremmo utilizzare il nuovo willTransitionToTraitCollection:withTransitionCoordinator: o, idealmente, lo viewWillTransitionToSize:withTransitionCoordinator:, ma sembra che quelli non vengano richiamati su UIInputViewControllers, almeno alla 8.0.2. Quindi attualmente l'opzione migliore sembra essere quella di mantenere un riferimento a heightConstraint e di modificare la costante nell'implementazione di willAnimateRotation.

Inoltre ricordo che c'era un po 'di trambusto con in realtà capire il nuovo orientamento; Ho finito per fare qualcosa del tipo:

let isLandscape: Bool = UIInterfaceOrientationIsLandscape(toInterfaceOrientation) e quindi usare quello.