打开键盘时,Popover中的UITableView滚出界限

时间:2010-06-25 23:14:47

标签: cocoa-touch uitableview ipad uipopovercontroller

我有一个包含UITableView的弹出窗口。这个UITableView有一个带有文本字段的单元格:

alt text http://cl.ly/1b50a21ca8202d22db1b/content

当弹出窗口靠近屏幕底部打开时,我点击文本字段进行编辑,键盘出现,弹出窗口向上移动以避免被键盘覆盖。但随着它向上移动,弹出框中的表视图向上滚动越界:

alt text http://cl.ly/4fe64fbfe9518f20560d/content

我可以将其向下滚动,但如何防止这种情况发生。

6 个答案:

答案 0 :(得分:1)

我得出结论,这是一个错误。我已向Apple(rdar://8156616)和report on OpenRadar提交了错误报告。

对于任何有兴趣的人,here是一个展示问题的示例项目。

答案 1 :(得分:0)

尝试禁用表格视图上的滚动。

[self.tableView scrollingEnabled:NO];

答案 2 :(得分:0)

如何设置弹出式控制器的内容视图。请尝试编辑内容视图的自动调整大小屏幕,并从左上角设置。

希望这有帮助。

谢谢,

Madhup

答案 3 :(得分:0)

也许您可以手动设置UITableView的contentSize?因此,向上滚动没有多余的内容。

答案 4 :(得分:0)

我遇到了同样的问题但隐藏了键盘并重新加载了表视图!

这个问题有一个解决方案!你要做的是首先隐藏键盘并重新加载表视图或更改方法接收键盘中的表格视图隐藏通知!

起初我打电话给

[textView resignFirstResponder]; or [textField resignFirstResponder];

然后

-(void)keyboardDidHide:(NSNotification *)notif {
   //Check some conditions if you want
   [tableView reloadData];
}

答案 5 :(得分:0)

您需要听键盘将显示通知:

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
        }
    }
}