Ответ 1
Я не уверен, что у меня была такая же проблема, но с помощью [UIView setAnimationBeginsFromCurrentState:YES];
решены (части) глюки (мое представление таблицы скользнуло вокруг при анимации изменения высоты кадра).
Если я пытаюсь анимировать высоту кадра 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]; }
Кто-нибудь знает, почему это происходит, или что может быть исправлено/обходное решение?
Любые предложения действительно оценены. ТИА!
Я не уверен, что у меня была такая же проблема, но с помощью [UIView setAnimationBeginsFromCurrentState:YES];
решены (части) глюки (мое представление таблицы скользнуло вокруг при анимации изменения высоты кадра).
Аналогичная проблема здесь. Это то, что я делаю, и начало анимации плавно, но размер сразу меняется... раздражает.
[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;
Для тех, кто хочет ответить на этот вопрос и ответить в будущем, вот как использовать ответ @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
}];
Это старый вопрос, и есть несколько предложений для обходного пути, но я думал, что добавлю свое.
Я закончил анимацию свойств contentInset
и scrollIndicatorInsets
, что создает иллюзию изменения размера таблицы.
Я нашел ваш вопрос, ища подходящий метод для изменения размера таблицыView. Я думаю, ваша проблема в вашей анимации вы указали "UIView" вместо UITableView. Я не смог дублировать вашу проблему, используя UIView или UITableView, но я использую SDK 3.1, и это может быть ошибка, исправленная с момента вашего сообщения. Я не уверен, но я надеюсь, что это поможет!
У меня точно такая же проблема. Я полагаю, что в табличных представлениях есть особое поведение на "setFrame:", кажется, что tableview удаляет ячейки, которые не будут видны с новым фреймом.
В случае анимации ячейки не будут видны только в конце анимации, но, похоже, что просмотр таблиц не волнует.
Если у кого-то есть лучшая теория, я был бы рад услышать это!
Это старый вопрос, но это может помочь кому-то в будущем;
Я решил аналогичную проблему, вставив tableview в UIView и изменив размер UIView вместо tableview. Я установил высоту tableview на большое значение, а также свойство "clip subviews" в UIView. Я изменяю размер UIView пропорционально таблице contentSize. Это не очень хорошее решение, но оно сработало для моих целей.
Наконец нашел решение! есть действительно ошибка! не используйте переменные, при анимации высоты используйте [[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);
}];
и он будет работать как волшебство!