在UITableView

时间:2016-04-02 08:08:33

标签: ios objective-c uitableview uiscrollview

我使用UITableView构建了一个chatScreen。我想滚动到UITableView的底部,从其他视图控制器打开屏幕的那一刻。然而,如果聊天很长,那么使用简单的滚动到底部函数,显示一个混蛋。是否有替代方案?

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    dispatch_async(dispatch_get_main_queue(), ^{

        NSIndexPath* lastIndexPath = [NSIndexPath indexPathForRow:_messagesArray.count-1  inSection:0];
        [_tableView scrollToRowAtIndexPath:lastIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
    });
}

3 个答案:

答案 0 :(得分:0)

使用UITableViewScrollPositionBottom代替UITableViewScrollPositionTop

答案 1 :(得分:0)

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    dispatch_async(dispatch_get_main_queue(), ^{
        CGFloat height = _tableView.contentSize.height - _tableView.bounds.size.height;
        [_tableView setContentOffset:CGPointMake(0, height) animated:YES];  
    });
}

答案 2 :(得分:0)

我认为这就是你想要的:

extension UITableView {

    func scrollToBottom() {
        scrollToRow(at: IndexPath(row: numberOfRows(inSection: numberOfSections-1)-1, section: numberOfSections-1),
                    at: .bottom, animated: true)
    }
}