UITableView帧高度动画故障
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITableView帧高度动画故障相关的知识,希望对你有一定的参考价值。
如果我试图为tableView
(例如:height -= 200
)的帧高设置动画,则在帧的平滑动画完成之前,最后200px中出现的单元格会突然消失。
为了确保我正在做的其他事情,我创建了一个新的基于视图的应用程序。在主要的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];
}
有谁知道为什么会这样,或者修复/解决方法可能是什么?
任何建议真的很感激。 TIA!
我不确定我是否有完全相同的问题,但使用[UIView setAnimationBeginsFromCurrentState:YES];
解决了(部分)故障(我的表格视图在动画帧高度变化时疯狂地滑动)。
这里也有同样的问题。这就是我正在做的事情并且原点动画平滑,但是尺寸立即变化......很烦人。
[UIView beginAnimations:@"HideTabbar" context:nil];
[UIView setAnimationDuration:.3];
self.tableView.frame = CGRectMake(0.0, 44.0, 320, 366);
[UIView commitAnimations];
更新:尝试在动画之前添加:
self.tableView.autoresizingMask = UIViewAutoresizingNone;
对于今后遇到这个问题和答案的人来说,这里是如何在ios 4中引入的UIView基于块的动画中使用@ ryyst的答案。
[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
// change frame etc here
} completion:^(BOOL finished) {
// any clean up here
}];
这是一个古老的问题,已经有一些解决方法的建议,但我想我会添加我的。
我最终动画了contentInset
和scrollIndicatorInsets
属性,这提供了表本身正在调整大小的错觉。
我有完全一样的问题。我认为tableviews在“setFrame:”上有一个特殊的行为,似乎tableview删除了新框架不可见的单元格。
在动画的情况下,单元格仅在动画结束时不可见,但似乎tableviews不关心。
如果有人有更好的理论,我会很高兴听到它!
终于找到了解决方案!确实有一个错误!!不要使用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);
}];
它会像魔术一样工作!
我在寻找适当的方法来调整tableView时发现了你的问题。我认为你的问题是在你的动画中你指定了UIView
而不是UITableView
。我无法使用UIView
或UITableView
复制您的问题,但我使用的是SDK 3.1,它可能是自您的帖子以来已修复的错误。我不确定,但我希望这有帮助!
这是一个古老的问题,但这可能有助于未来的某些人;
我通过在tableview
中嵌入UIView
并调整UIView
而不是tableview
来解决类似的问题。我将tableview's
高度设置为一个较大的值,并在UIView
上设置“剪辑子视图”属性。我调整UIView
的大小与tableview的contentSize
成比例。它不是一个好的解决方案,但它适用于我的目的。
以上是关于UITableView帧高度动画故障的主要内容,如果未能解决你的问题,请参考以下文章
自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,"掏粪男孩Gif"顺便再提提onWindowFocusChanged)(代码片段