Изменение определенной высоты строки uitableviewcell при прокрутке uitableview - PullRequest
7 голосов
/ 03 февраля 2012

У меня есть UITableview с 2 разделами, 1 строкой в ​​1-м разделе и переменным количеством строк для второго раздела. Когда пользователь прокручивает таблицу вверх (палец перемещается вверх), тогда просмотр таблицы выполняет то же, что и по умолчанию, но когда пользователь находится наверху uitableview и прокручивает вниз (палец движется вниз), он должен выглядеть как первая ячейка Высота первой секции увеличивается по мере того, как пользователь прокручивает ее вниз (а при отпускании касания высота строки возвращается к исходной высоте 100). Я пытался

-(void)scrollViewDidScroll:(UIScrollView*)scrollView{
    if(scrollView.contentOffset.y < 0){
        [mainTable reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection: 0]] withRowAnimation:UITableViewRowAnimationNone];
    }
}

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath{
    if(indexPath.section == 0 && tableView.contentOffset.y < 0){
        return -tableView.contentOffset.y+100;//Default height is 100
    }
}

но метод reloadRows сбрасывает contentOffset в 0, так что просмотр таблицы просто заикается, когда я опускаюсь. Кажется, что если это не сработает, то мне придется написать все на UIScrollView, и это кажется огромной болью без перерабатываемых клеток.

У кого-нибудь есть предложения?

1 Ответ

9 голосов
/ 04 февраля 2012

Нет необходимости перезагружать строку, я просто изменил кадр напрямую. Удостоверьтесь, что вы установили cell.layer.masksToBounds = YES и сделали вложенные просмотры в ячейке больше, чем исходная высота ячейки.

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    if (mainTable.contentOffset.y < 0) {
        UITableViewCell *cell = [mainTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
        float rawr = mainTable.contentOffset.y;
        cell.frame = CGRectMake(cell.frame.origin.x, rawr, cell.frame.size.width, 100-rawr);
    }
}
...