我有一个实现文本字段委托的单元格类。在这个委托中,我调用一个函数来告诉tableview根据indexPath滚动到特定的行。这在大多数情况下都适用,但在行位于表视图的底部时则不行。 cell类有一个table属性,在我的主控制器cellForRow方法中传入。代码如下:
extension IR_TextCell: UITextFieldDelegate {
func textFieldDidBeginEditing(_ textField: UITextField) {
util_textField.addHightlightedBorder(textField)
if let index = table?.indexPath(for: self)
{
scrollDelegate?.scrollToMe(at: index)
}
}
}
func scrollToMe(at index: IndexPath) {
self.tableV.scrollToRow(at: index, at: .middle, animated: false)
}
我尝试在此处包装DispatchQueue.main.async并添加截止日期,但它没有什么区别。
我是否需要更改我的tableview的底部约束?
答案 0 :(得分:0)
我的情况与您的情况略有不同,但在滚动到底部附近的单元格时遇到了同样的问题。现在,它可能适合您的实际情况,但我希望这对遇到此帖子的人有所帮助。我怀疑这可能是时间安排问题,所以我最终如下所示:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row == tableView.indexPathsForVisibleRows?.last?.row {
let scrollIndex = 0//set to your predetermined scrolled to index
let cellRect = tableView.rectForRow(at: indexPath)
let completelyVisible = tableView.bounds.contains(cellRect)
if scrollIndex >= indexPath.row && !completelyVisible {
let maxIndex = 10//number of elements in the array - 1
//in case you want a delay
DispatchQueue.main.asyncAfter(deadline: .now() + 0) {
self.tableView.scrollToRow(at: IndexPath(row: scrollIndex > maxIndex ? maxIndex : scrollIndex, section: 0), at: .middle, animated: false)
}
}
}
}