UITableView в Popover прокручивается за пределы, когда клавиатура открыта - PullRequest
2 голосов
/ 26 июня 2010

У меня есть поповер, который содержит UITableView. Этот UITableView имеет ячейку с текстовым полем:

альтернативный текст http://cl.ly/1b50a21ca8202d22db1b/content

Когда всплывающее окно открывается в нижней части экрана, и я нажимаю на текстовое поле, чтобы отредактировать его, появляется клавиатура, и всплывающее окно перемещается вверх, чтобы ее не закрывала клавиатура. Но по мере продвижения вверх табличное представление в поповере прокручивается вверх за пределы:

альтернативный текст http://cl.ly/4fe64fbfe9518f20560d/content

Я могу прокрутить его обратно вниз, но как мне предотвратить это.

Ответы [ 6 ]

1 голос
/ 03 июля 2010

Я пришел к выводу, что это ошибка.Я подал в Apple отчет об ошибке ( rdar: // 8156616 ), а также отчет на OpenRadar .

Для всех, кто заинтересован, здесь - это пример проекта, который демонстрирует проблему.

0 голосов
/ 09 января 2019

При прослушивании клавиатуры будет отображаться уведомление:

NotificationCenter.default.addObserver(self, selector: #selector(handleKeyboardStatusForPopover(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)

Затем вы должны увидеть, пересекается ли рамка клавиатуры с поповером, и вычесть значения, добавленные с клавиатуры, в кадр контейнера всплывающего окна:

@objc func handleKeyboardStatusForPopover(_ notification: Notification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        if keyboardSize.intersects((self.resultPopOverTableViewController!.view.superview!.superview!.frame).insetBy(dx: 0, dy: 60)) {
            let popOverContainer = viewControllerDisplayedbyPopover?.view.superview!.superview!
            // cellDisplayingDetailInfo = sourceview of popover  
            popOverContainer!.frame.origin.y = popOverContainer!.frame.minY - keyboardSize.height + cellDisplayingDetailInfo.frame.maxY
        }
    }
}
0 голосов
/ 11 января 2011

У меня была такая же проблема, но когда я прятал клавиатуру и перезагружал табличное представление!

Существует одно решение этой проблемы! Что вам нужно сделать, это сначала спрятать клавиатуру и перезагрузить представление таблицы или изменить представление таблицы в методе получения клавиатуры действительно скрыл уведомление!

Сначала я позвонил

[textView resignFirstResponder]; or [textField resignFirstResponder];

, а затем

-(void)keyboardDidHide:(NSNotification *)notif {
   //Check some conditions if you want
   [tableView reloadData];
}
0 голосов
/ 01 июля 2010

Возможно, вы можете установить размер содержимого UITableView вручную?Чтобы не было лишней прокрутки вверх.

0 голосов
/ 26 июня 2010

Как вы настраиваете отображение содержимого вашего всплывающего контроллера? Попробуйте отредактировать маску автоматического изменения размера представления содержимого и установите ее сверху слева.

Надеюсь, это поможет.

Спасибо

Madhup

0 голосов
/ 26 июня 2010

Попробуйте отключить прокрутку в табличном представлении.

[self.tableView scrollingEnabled:NO];
...