Подтвердить что ты не робот

Сбой анимации кадра в UITableView

Если я пытаюсь анимировать высоту кадра tableView (ex: height - = 200), ячейки, которые появляются в последних 200px, исчезают внезапно, пока не завершится плавная анимация кадра.

Чтобы убедиться, что я ничего не делаю, я создал новое приложение на основе View. В главном viewController я создаю собственное табличное представление с достаточным количеством строк для заполнения всего экрана. А при выборе строки я делаю простую анимацию высоты.

наиболее релевантный код:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.myTable = [[[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)] autorelease];
    myTable.delegate = self;
    myTable.dataSource = self;
    [self.view addSubview:myTable];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    CGRect frame = self.myTable.frame;
    frame.size.height = 200;
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDelay:.5f];
    [UIView setAnimationDuration:0.5f];
    self.myTable.frame = frame;
    [UIView commitAnimations];
}

Кто-нибудь знает, почему это происходит, или что может быть исправлено/обходное решение?

Любые предложения действительно оценены. ТИА!

4b9b3361

Ответ 1

Я не уверен, что у меня была такая же проблема, но с помощью [UIView setAnimationBeginsFromCurrentState:YES]; решены (части) глюки (мое представление таблицы скользнуло вокруг при анимации изменения высоты кадра).

Ответ 2

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

    [UIView beginAnimations:@"HideTabbar" context:nil];
    [UIView setAnimationDuration:.3];
        self.tableView.frame = CGRectMake(0.0, 44.0, 320, 366);
    [UIView commitAnimations];

UPDATE: попробуйте добавить это перед анимацией:

self.tableView.autoresizingMask = UIViewAutoresizingNone;

Ответ 3

Для тех, кто хочет ответить на этот вопрос и ответить в будущем, вот как использовать ответ @ryyst в анимациях на основе блоков на основе UIView, представленных в iOS 4.

    [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
            // change frame etc here
    } completion:^(BOOL finished) {
            // any clean up here
    }];

Ответ 4

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

Я закончил анимацию свойств contentInset и scrollIndicatorInsets, что создает иллюзию изменения размера таблицы.

Ответ 5

Я нашел ваш вопрос, ища подходящий метод для изменения размера таблицыView. Я думаю, ваша проблема в вашей анимации вы указали "UIView" вместо UITableView. Я не смог дублировать вашу проблему, используя UIView или UITableView, но я использую SDK 3.1, и это может быть ошибка, исправленная с момента вашего сообщения. Я не уверен, но я надеюсь, что это поможет!

Ответ 6

У меня точно такая же проблема. Я полагаю, что в табличных представлениях есть особое поведение на "setFrame:", кажется, что tableview удаляет ячейки, которые не будут видны с новым фреймом.

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

Если у кого-то есть лучшая теория, я был бы рад услышать это!

Ответ 7

Это старый вопрос, но это может помочь кому-то в будущем;

Я решил аналогичную проблему, вставив tableview в UIView и изменив размер UIView вместо tableview. Я установил высоту tableview на большое значение, а также свойство "clip subviews" в UIView. Я изменяю размер UIView пропорционально таблице contentSize. Это не очень хорошее решение, но оно сработало для моих целей.

Ответ 8

Наконец нашел решение! есть действительно ошибка! не используйте переменные, при анимации высоты используйте [[UIScreen mainScreen]). Вот так:

[UIView animateWithDuration:0.5 animations:^{
            tableView.frame=CGRectMake(0, 38, fullScreenRect.size.width, [[UIScreen mainScreen] bounds].size.height-38);
}];

not:

[UIView animateWithDuration:0.5 animations:^{
            tableView.frame=CGRectMake(0, 38, fullScreenRect.size.width, fullScreenRect.size.width-38);
}];

и он будет работать как волшебство!