我注意到一种奇怪的UITableView行为,这种行为似乎只发生在iOS 11设备上。
在插入新行之后(更改数据源然后调用reloadData,UITableView
在调用scrollToRow
或scrollToBottom()
方法时不会滚动到该行。
在iOS 10或更早版本上执行某些操作时,它可以完美地工作,并且UITable会像它应该的那样滚动。
谢谢!
答案 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)
$(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
适合我。