Как прокрутить UITableView к определенной позиции - PullRequest
58 голосов
/ 02 мая 2011

Как прокрутить ячейку таблицы в определенную позицию? У меня есть таблица, которая показывает 3 строки (в зависимости от высоты). то, что я хочу, если я нажимаю на 1-й строке, чем в соответствии с высотой таблицы, 1-й ряд должен прокручиваться и получать новую позицию (центр) и то же самое для других строк. Я пытался contenOffset, но не работал ..

отредактировано:

Короче говоря, некоторая вещь, как сборщик данных, когда мы выбираем любую строку в сборщике, строка прокручивается к центру.

Спасибо ..

Ответы [ 7 ]

133 голосов
/ 02 мая 2011

он должен работать, используя - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated, используя его следующим образом:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[yourTableView scrollToRowAtIndexPath:indexPath 
                     atScrollPosition:UITableViewScrollPositionTop 
                             animated:YES];

atScrollPosition может принимать любое из следующих значений:

typedef enum {
UITableViewScrollPositionNone,
UITableViewScrollPositionTop,
UITableViewScrollPositionMiddle,
UITableViewScrollPositionBottom
} UITableViewScrollPosition;

Надеюсь, это поможет вам

Приветствия

17 голосов
/ 02 мая 2011
[tableview scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];

Это переместит ваш просмотр таблицы в первый ряд.

15 голосов
/ 03 мая 2011

наконец я нашел ... это будет хорошо работать, когда таблица отображает только 3 строки ... если строки больше, изменения должны быть соответственно ...

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{    
    return 1;
}


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section
{  
    return 30;
}

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {         
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault    
                                       reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.
    cell.textLabel.text =[NSString stringWithFormat:@"Hello roe no. %d",[indexPath row]];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell * theCell = (UITableViewCell *)[tableView     
                                              cellForRowAtIndexPath:indexPath];

    CGPoint tableViewCenter = [tableView contentOffset];
    tableViewCenter.y += myTable.frame.size.height/2;

    [tableView setContentOffset:CGPointMake(0,theCell.center.y-65) animated:YES];
    [tableView reloadData]; 
 }
14 голосов
/ 02 мая 2011

Использование [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:scrollPosition animated:YES]; Прокручивает получатель, пока строка, обозначенная индексным путем, не окажется в определенном месте на экране.

И

scrollToNearestSelectedRowAtScrollPosition:animated:

Прокручивает представление таблицы так, чтобы выбранныйстрока, ближайшая к указанной позиции в табличном представлении, находится в этой позиции.

9 голосов
/ 20 мая 2016

Версия Swift 4.2:

let indexPath:IndexPath = IndexPath(row: 0, section: 0)
self.tableView.scrollToRow(at: indexPath, at: .none, animated: true)

Enum: Это доступные позиции прокрутки tableView - здесь для справки. Вам не нужно включать этот раздел в свой код.

public enum UITableViewScrollPosition : Int {

case None
case Top
case Middle
case Bottom
}

DidSelectRow:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let theCell:UITableViewCell? = tableView.cellForRowAtIndexPath(indexPath)

    if let theCell = theCell {
        var tableViewCenter:CGPoint = tableView.contentOffset
        tableViewCenter.y += tableView.frame.size.height/2

        tableView.contentOffset = CGPointMake(0, theCell.center.y-65)
        tableView.reloadData()
    }

}
1 голос
/ 27 июля 2016

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

0 голосов
/ 08 марта 2018

Просто одна строка кода:

self.tblViewMessages.scrollToRow(at: IndexPath.init(row: arrayChat.count-1, section: 0), at: .bottom, animated: isAnimeted)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...