UITableView глюк анимации высоты кадра - PullRequest
18 голосов
/ 23 августа 2009

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

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

самый соответствующий код:

- (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];
}

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

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

Ответы [ 8 ]

15 голосов
/ 01 апреля 2011

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

8 голосов
/ 28 января 2010

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

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

ОБНОВЛЕНИЕ: попробуйте добавить это до анимации:

self.tableView.autoresizingMask = UIViewAutoresizingNone;
4 голосов
/ 27 мая 2013

Для любого, кто задаст этот вопрос и ответ в будущем, вот как использовать ответ @ 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
    }];
3 голосов
/ 13 августа 2011

Это старый вопрос, и уже есть пара предложений для обхода, но я решил добавить свой.

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

1 голос
/ 27 ноября 2009

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

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

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

0 голосов
/ 21 июня 2017

Наконец-то нашли решение! действительно есть ошибка! не используйте variables, когда анимация высоты используйте [[UIScreen mainScreen] bounds]. Как это:

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

не:

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

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

0 голосов
/ 23 октября 2013

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

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

0 голосов
/ 05 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...