UITableview在重新加载时滚动到顶部太高了?

时间:2016-02-25 22:25:37

标签: ios objective-c uitableview cocoa-touch

我正在使用scrollRectToVisible:

[self.tblArticle scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];

和/或setContentOffset:

NSIndexPath* top = [NSIndexPath indexPathForRow:NSNotFound inSection:0];
    [self.tblArticle scrollToRowAtIndexPath:top atScrollPosition:UITableViewScrollPositionTop animated:YES];

和/或这:

[self.tblArticle setContentOffset: CGPointZero animated: YES];
重新加载后,

到(尝试)滚动到我的tableView的顶部。但有时它太高了,所以我看到桌子上面有太多的空白区域。我的表格有一个标题,位于单元格行的上方。 当我向下滚动一点然后启动重新加载时它太高了。如果我在顶部,滚动是好的。但是在重新加载之前我得到的越低,标题上方就会看到更多的空白区域。 现在我计算我有多低,然后设置这样的东西:

CGFloat height = 0;
    if(self.selectedCategoryID > 2)
        height = 250;
    [self.tblArticle scrollRectToVisible:CGRectMake(0, height, 1, 1) animated:YES];

这是非常糟糕的。谢谢你的任何建议!

编辑我正在使用uitableview重新加载:

// Reload table
[self.tblArticle reloadData];

This is the wanted result

But I get this instead...

2 个答案:

答案 0 :(得分:1)

试试这个:

[_mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [_mainTableView setContentOffset:CGPointZero animated:YES];
});

答案 1 :(得分:0)

请尝试将UITableview滚动到顶部。

@IBOutlet var label: UILabel!
var number = 0
var timer: NSTimer!

override func viewDidLoad() {
    super.viewDidLoad()
    timer = NSTimer.scheduledTimerWithTimeInterval(0.001, target: self, selector: Selector("addNumber"), userInfo: nil, repeats: true)
}

func addNumber () {
    number++
    label.text = number.description
}

override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated)
    timer?.invalidate()
}