2

我有一个包含 UITableView 的弹出框。这个 UITableView 有一个单元格,里面有一个文本字段:

替代文字 http://cl.ly/1b50a21ca8202d22db1b/content

当弹出框在屏幕底部附近打开时,我点击文本字段进行编辑,键盘出现,弹出框向上移动以避免被键盘覆盖。但是当它向上移动时,弹出窗口中的表格视图会向上滚动超出范围:

替代文字 http://cl.ly/4fe64fbfe9518f20560d/content

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

4

6 回答 6

1

我得出的结论是这是一个错误。我已经向 Apple ( rdar://8156616 ) 提交了一份错误报告以及一份关于 OpenRadar的报告。

对于任何感兴趣的人,这里有一个演示该问题的示例项目。

于 2010-07-02T21:20:41.260 回答
0

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

[self.tableView scrollingEnabled:NO];
于 2010-06-26T00:05:55.373 回答
0

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

希望这可以帮助。

谢谢,

马杜普

于 2010-06-26T12:15:15.650 回答
0

也许您可以手动设置 UITableView 的 contentSize?这样就没有多余的东西向上滚动了。

于 2010-06-30T22:55:20.893 回答
0

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

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

一开始我打电话

[textView resignFirstResponder]; or [textField resignFirstResponder];

进而

-(void)keyboardDidHide:(NSNotification *)notif {
   //Check some conditions if you want
   [tableView reloadData];
}
于 2011-01-11T06:02:10.197 回答
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
        }
    }
}
于 2019-01-09T17:10:15.933 回答