OK, also versuche ich ein Add-Kommentar-Feld in meiner Sicht zu implementieren. Hier ist das Layout:Bewegt UIView in NavigationController funktioniert nicht
Ich habe eine UITabBarController
enthält eine UINavigationController
wo meine UIViewController
geschoben wird. Das Ansichtslayout besteht aus einer UITableView
und einer benutzerdefinierten UIView
, die eine UITextView
und eine UIButton
enthält.
ich für Tastatur-Benachrichtigungen bin Überwachung, das ist der Code, den ich habe:
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
}
Wenn die Tastatur angezeigt wird, ich habe Haltepunkte setzen und sehen, dass die Y-Koordinate aktualisiert wird, aber meiner Ansicht nach bleibt, wo es ist , versteckt hinter der Tastatur.
Ein paar Notizen. Ich verwende IQKeyboardManager
und habe die Entfernungsbehandlung für diese Klasse deaktiviert. Ich benutze auch PureLayout
zum Auslegen der Steuerelemente innerhalb der benutzerdefinierten UIView
. Ich setze keine Einschränkungen für die benutzerdefinierte UIView
in der View-Controller. Die Positionen der UITableView
und der benutzerdefinierten UIView
sind im viewWillLayoutSubview
Verfahren wie unten:
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)
}
Auf einer anderen Anmerkung, das funktioniert perfekt in einer anderen Ansicht Ich habe, dass kein Kind eines UINavigationController
ist.
Screenshots von dem, was geschieht:
Die Ansicht mit der Eingabeansicht:
Wenn die Tastatur angezeigt wird:
Jede Hilfe ist stark geschätzt.
Ich habe versucht, dies in vergebens hinzuzufügen. Ich verwende kein Storyboard oder Xib, alle meine Ansichten werden programmatisch erstellt. Wenn ich zu der viewDidLayoutSubviews-Methode wechselte, wurde das untere Panel nicht einmal in der Ansicht – bhmahler
angezeigt. Sie könnten den Code der Initialisierung von tableView und inputPanel veröffentlichen. Sind Sie sicher, dass keyboardWillAppear aufgerufen wird? Geht es in deinen if Block? – beyowulf
Es wird definitiv angerufen. Ich bin durch den Code dort gegangen und sehe, dass der Wert von origin.y geändert wird, aber die Ansicht wird nicht nach oben verschoben.Ich fange an zu glauben, dass dies ein Problem im Zusammenhang mit der Verwendung von PureLayout in der benutzerdefinierten Ansicht sein könnte. – bhmahler