添加新行后,UITableView scrollToRow不再适用于iOS 11

时间:2017-09-06 12:39:34

标签: ios iphone uitableview

我注意到一种奇怪的UITableView行为,这种行为似乎只发生在iOS 11设备上。

在插入新行之后(更改数据源然后调用reloadData,UITableView在调用scrollToRowscrollToBottom()方法时不会滚动到该行。

在iOS 10或更早版本上执行某些操作时,它可以完美地工作,并且UITable会像它应该的那样滚动。

谢谢!

5 个答案:

答案 0 :(得分:6)

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
});

在我的案例中添加一个小延迟。

答案 1 :(得分:1)

Swift 4 语法

中的

Accepted answer

$(document).ready(function(){

    /**** When you click on input text element - remove class 'makered' -- Start *****/
    $("form input").focus(function(){
        $(this).removeClass('makeRed');
    });
    /**** When you click on input text element - remove class 'makered' -- Ends *****/

    /**** While submit, if form is not valid, add error line and do not allow to submit, else allow submit -- Starts *****/
    $("form").submit(function() { //validate on submit
        var isError = false;
        $(this).find('input').each(function(){
            if(!($(this).val()))
            {
                $(this).addClass('makeRed');
                isError = true;
            }
            else
                $(this).removeClass('makeRed');

        });
        if(isError)
            return false; // do not submit the form
    });
    /**** While submit, if form is not valid, add error line and do not allow to submit, else allow submit -- Ends *****/

答案 2 :(得分:1)

我不确定我遇到的情况是否适用于这个问题,但我也遇到了UITableView.scrollTo...从iOS 11开始行为不端的情况。

就我而言,我连续拨打UITableView.reload...UITableView.scrollTo...。事实证明,秩序很重要。

这有效:

tableView.reloadData()
tableView.scrollToRow(at: indexPath, at: .top, animated: true)

这不是:

tableView.scrollToRow(at: indexPath, at: .top, animated: true)
tableView.reloadData()

希望这有帮助。

答案 3 :(得分:1)

您是在viewDidAppear中呼叫scrollToRow()吗?

将函数调用从viewWillAppear移到viewDidAppear对我来说很有效。

答案 4 :(得分:0)

只是DispatchQueue.main.async适合我。