我想阻止我的表格视图滚动到所选单元格。
由于某种原因,当我选择一个单元格并且键盘出现时,我的单元格向上移动了一点,我不希望出现这种情况。
我正在使用表格视图控制器并将isScrollEnabled
设置为false
。
我已经覆盖了didSelectRowAt
,绝对不做任何事情。
在故事板中,我已禁用滚动,禁用分页,禁用滚动/缩放时弹跳,水平/垂直禁用弹跳。
然而它仍然滚动到选定的单元格。
答案 0 :(得分:0)
我建议您使用带有tableview的UIViewController
。
您描述的行为实际上是由UITableViewController
自动处理的内容。
编辑:
以下是UIViewController
的屏幕截图,其中包含带静态单元格的tableview:
答案 1 :(得分:0)
只需使用这行代码就可以避免滚动tableview ....
tableView.isScrollEnabled = false
此行将禁用tableview的滚动功能,只要您希望它再次滚动,请将此属性设置为true。
答案 2 :(得分:0)
UITableView使用平移手势识别器来检测滚动手势。 tableview本身必须是它的委托,因为我们可以通过继承UITableView来阻止手势被检测到:
import UIKit
class DontScrollTableView: UITableView, UIGestureRecognizerDelegate {
var dontScroll = false
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return !dontScroll
}
}
在我们的UITableViewDelegate实现中,我们可以切换滚动:
var previouslySelectedIndexPath: IndexPath?
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let tv = tableView as? DontScrollTableView {
if let lastSelected = previouslySelectedIndexPath {
tv.dontScroll = lastSelected != indexPath
if lastSelected == indexPath {
tableView.deselectRow(at: indexPath, animated: false)
previouslySelectedIndexPath = nil
} else {
previouslySelectedIndexPath = indexPath
}
} else {
tv.dontScroll = true
previouslySelectedIndexPath = indexPath
}
}
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
if let tv = tableView as? DontScrollTableView {
tv.dontScroll = false
}
}
答案 3 :(得分:-2)
解决方案是覆盖viewwillappear而不是调用super方法。