OK, donc j'essaye d'implémenter une boîte de commentaire ajouter dans mon vue. Voici la disposition:Déplacement de UIView dans NavigationController ne fonctionne pas
J'ai un UITabBarController
contenant un UINavigationController
où mon UIViewController
est poussé à. La présentation de vue se compose d'un UITableView
et d'un UIView
personnalisé qui contient un UITextView
et un UIButton
.
Je surveille les notifications de clavier, voici le code que j'ai:
override func viewDidAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardWillAppear), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardWillDisappear), name: UIKeyboardWillHideNotification, object: nil)
}
override func viewDidDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
func keyboardWillAppear(notification: NSNotification){
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
var frame = inputPanel.frame
frame.origin.y = self.view.frame.height - (keyboardSize.height + inputPanel.frame.size.height)
inputPanel.frame = frame
}
}
func keyboardWillDisappear(notification: NSNotification){
var frame = inputPanel.frame
frame.origin.y = self.view.frame.height - inputPanel.frame.size.height
inputPanel.frame = frame
}
Lorsque l'écran du clavier, j'ai mis des points d'arrêt et de voir que la coordonnée y est mis à jour, mais mon avis reste là où il est , caché derrière le clavier.
Quelques notes. J'utilise IQKeyboardManager
et j'ai désactivé la gestion de distance pour cette classe. J'utilise également PureLayout
pour mettre en place les contrôles à l'intérieur de la coutume UIView
. Je ne définis aucune contrainte pour le UIView
personnalisé dans le contrôleur de vue. Les positions du UITableView
et la coutume UIView
sont définies dans la méthode viewWillLayoutSubview
comme ci-dessous:
override func viewWillLayoutSubviews() {
let y = self.view.frame.height - 44
self.tableView.frame = CGRectMake(0, 0, self.view.frame.width, y)
self.inputPanel.frame = CGRectMake(0, y, self.view.frame.width, 44)
}
Sur une autre note, cela fonctionne parfaitement dans une autre vue que j'ai ce n'est pas un enfant d'un UINavigationController
.
captures d'écran de ce qui se passe:
La vue avec la vue d'entrée:
Lorsque le clavier est indiqué:
Toute aide est grandement apprécié.
J'ai essayé d'ajouter cela en vain. Je n'utilise aucun storyboard ou xib, toutes mes vues sont créées par programmation. Lorsque je suis passé à la méthode viewDidLayoutSubviews, le panneau inférieur n'apparaissait même pas dans la vue – bhmahler
Vous souhaiterez peut-être publier le code de l'initialisation tableView et inputPanel. Etes-vous sûr que keyboardWillAppear est appelé? Est-ce que ça va dans votre bloc? – beyowulf
Il est définitivement appelé. J'ai parcouru le code là-bas et voir la valeur d'origine.y être changée, mais la vue ne bouge pas.Je commence à penser que cela peut être un problème lié à l'utilisation de PureLayout dans la vue personnalisée. – bhmahler