UITableView在reloaddata上滚动

时间:2019-01-18 13:18:25

标签: swift uitableview horizontal-scrolling contentoffset

我的项目中有UITableview。 单击页脚上的添加新按钮时,我正在获取新数据。 这是我的应用程序(已演示) https://pastenow.ru/e327ad5e4978777b280552c4e92f032d

在点击添加新Btn时 有一些向上滚动。我想禁用它,不需要将uitableview滚动到任何方向。 这是屏幕截图(已演示) https://pastenow.ru/e489ca3b9b5f78c31ad388cf8b3d02b9

我已经检查了uitableview的setcontentoffset,但是我不知道为什么不起作用。

override func viewDidLoad() {
        super.viewDidLoad()
        for i in 0...10 {
            items.append(i)
        }
    }

    @IBAction func addNewBtnClicked(_ sender: Any) {
        for i in 10...20 {
            items.append(i)
        }
        tableView.reloadData()    
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return items.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell") as! MyCell
        cell.titleLabel.text = "\(items[indexPath.row])"
        return cell
    }

2 个答案:

答案 0 :(得分:0)

我已经添加了此代码,可以正常工作。我知道它不是真正的解决方案,但现在可以使用。

tableView.scrollToRow(at: IndexPath(row: newsList.count - myPageSize, section: 0), at: .bottom, animated: false  )

答案 1 :(得分:0)

我也搜索了这个问题,直到现在我还没有找到一个不是 hardcoded 的解决方案,但是至少找到了以下满足我需要的解决方案(它几乎与您的):

extension UITableView {

    func reloadDataWithoutAnimation(scrollingAt desiredIndexPath: IndexPath, at desiredScrollPosition: UITableView.ScrollPosition) {
        UIView.performWithoutAnimation {
            reloadData()
            scrollToRow(at: desiredIndexPath, at: desiredScrollPosition, animated: false)
        }
    }

}

用法:

let indexPath = IndexPath(row: desiredRow, section: desiredSection)
tableView.reloadDataWithoutAnimation(scrollingAt: indexPath, at: desiredScrollPosition)

希望对您有帮助。