iOS UITableView Прокрутите до конца раздела

Я собираюсь сделать табличное представление с двумя разделами внутри него. Я могу добавлять ячейки в каждый раздел программно, и когда я добавляю, я прокручиваю до конца таблицы, используя

[_tableView setContentOffset:CGPointMake(0, CGFLOAT_MAX)];

Мой вопрос заключается в том, как я могу прокрутить до конца раздела 0, чтобы, когда пользователь добавляет ячейку в раздел 0, табличное представление динамически прокручивалось до последней ячейки в разделе 0.

Благодарю.


person Mostafa A. Khattab    schedule 02.10.2014    source источник


Ответы (5)


Вы можете попробовать с этим кодом:

int yourSection = 2;
int lastRow = [tableView numberOfRowsInSection:yourSection] - 1;
[tableView scrollToRowAtIndexPath:[NSIndexPath lastRow inSection:yourSection] atScrollPosition:UITableViewScrollPositionBottom animated:YES];

Вы получаете количество строк в своем разделе, а затем прокручиваете до этого indexPath.

person Benetz    schedule 02.10.2014
comment
Это даст вам индекс за пределами этого номера строки. Вам нужно вычесть 1 - person Moriya; 29.07.2015
comment
Всегда не забывайте проверять, существует ли этот раздел и содержит ли он больше строк, иначе произойдет сбой. - person Benetz; 29.07.2015

Все приведенные выше предложения верны, по крайней мере, на основе документов. Но в моем случае это не сработало - я не мог заставить прокрутку показывать последнюю строку в табличном представлении. Мне пришлось добавить задержку при прокрутке, чтобы это сработало.

- (void)scrollToTheBottom:(BOOL)animated
{
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowCount-1 inSection:0];
    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:animated];
}

Я назвал вышеизложенное как:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self scrollToTheBottom:YES];
});
person Shirish Kumar    schedule 13.05.2015
comment
Спасибо. У меня было много вычислений в одном из моих разделов, и ни одно решение для прокрутки не работало, кроме этого. - person wheeliez; 28.05.2015
comment
Спасибо. Это решение устраняет проблему, когда последняя ячейка не отображается при прокрутке до последней ячейки. - person Sean Dev; 17.06.2015
comment
Большое спасибо за это, я много пытаюсь, но не могу работать ни с одним кодом, но ваш код снова работает для меня, спасибо. - person Super Developer; 03.08.2016

когда вы вставляете строку в конце, у вас есть путь к индексу, вы можете использовать метод scrollToIndexPath для просмотра таблицы для прокрутки

[self.liveChannelsTable scrollToRowAtIndexPath:IndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
person Adnan Aftab    schedule 02.10.2014

На всякий случай это решение в Swift:

extension UITableView {
    func scrollToBottom(animated: Bool = true) {
        let sections = self.numberOfSections
        let rows = self.numberOfRowsInSection(sections - 1)
        self.scrollToRowAtIndexPath(NSIndexPath(forRow: rows - 1, inSection: sections - 1), atScrollPosition: .Bottom, animated: true)
    }
}
person Valentin Shergin    schedule 03.12.2015

В Swift 3 он был обновлен до:

let indexPath = IndexPath(row: self.numberOfRowsInSection(0) - 1), section: 0)
self.commentsTableView.scrollToRow(at: indexPath, at: .bottom, animated: false)
person Daniel Que    schedule 11.10.2016