ОК, поэтому я пытаюсь реализовать окно комментариев добавления на мой взгляд. Вот макет:Перемещение UIView внутри NavigationController не работает
У меня есть UITabBarController
, содержащий UINavigationController
, на который отодвинут мой UIViewController
. Макет представления состоит из UITableView
и пользовательского UIView
, который содержит UITextView
и UIButton
.
Я мониторинг уведомлений клавиатуры, это код у меня есть:
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
}
Когда клавиатура отображается, я установить точки останова и увидеть, что координату обновляется, но мое мнение остается там, где это , скрытый за клавиатурой.
Несколько нот. Я использую IQKeyboardManager
и отключил дистанцию для этого класса. Я также использую PureLayout
для выкладки элементов управления внутри пользовательского UIView
. Я не устанавливаю никаких ограничений для пользовательского UIView
в контроллере представления. Позиции UITableView
и пользовательские UIView
устанавливаются в viewWillLayoutSubview
методе, как показано ниже:
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)
}
На другой ноте, это прекрасно работает в другой точке зрения у меня есть, что это не ребенок из UINavigationController
.
Снимки экрана происходящего:
Вид с точки зрения ввода:
Когда клавиатура отображается:
Любая помощь очень оценили.
Я попытался добавить это безрезультатно. Я не использую раскадровку или xib, все мои взгляды создаются программно. Когда я переключился на метод viewDidLayoutSubviews, нижняя панель даже не отображалась в представлении – bhmahler
Возможно, вы захотите опубликовать код инициализации tableView и inputPanel. Также вы уверены, что клавиатураWillAppear получает вызов? Это происходит в вашем блоке if? – beyowulf
Это определенно получилось вызвано. Я прошел через код там и вижу, что значение origin.y изменяется, но представление не перемещается вверх.Я начинаю думать, что это может быть проблема, связанная с использованием PureLayout внутри пользовательского представления. – bhmahler