如果我尝试设置tableView
的帧高(ex: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!
答案 0 :(得分:15)
我不确定完全同样的问题,但使用[UIView setAnimationBeginsFromCurrentState:YES];
解决了(部分)毛刺(我的表视图在动画帧高度变化时疯狂滑动)
答案 1 :(得分:8)
这里也有同样的问题。这就是我正在做的事情并且原点动画平滑,但是尺寸会立即改变......很烦人。
[UIView beginAnimations:@"HideTabbar" context:nil];
[UIView setAnimationDuration:.3];
self.tableView.frame = CGRectMake(0.0, 44.0, 320, 366);
[UIView commitAnimations];
更新:尝试在动画前添加:
self.tableView.autoresizingMask = UIViewAutoresizingNone;
答案 2 :(得分:4)
对于任何人来说这个问题&回答未来,这里是如何在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
}];
答案 3 :(得分:3)
这是一个老问题,已经有一些建议可以解决,但我想我会添加我的。
我最终动画了contentInset
和scrollIndicatorInsets
属性,这提供了表格本身正在调整大小的错觉。
答案 4 :(得分:1)
我有完全相同的问题。我认为tableviews在“setFrame:”上有一个特殊的行为,似乎tableview删除了新框架不可见的单元格。
如果是动画,单元格只会在动画结束时才会显示,但似乎表格视图无关紧要。
如果有人有更好的理论,我会很高兴听到它!
答案 5 :(得分:0)
我在寻找适当的方法来调整tableView时发现了你的问题。我认为您的问题出在动画中,您已指定UIView
而不是UITableView
。我无法使用UIView
或UITableView
复制您的问题,但我使用的是 SDK 3.1 ,这可能是自您的帖子以来已修复的错误。我不确定,但我希望这有帮助!
答案 6 :(得分:0)
这是一个古老的问题,但这可能有助于将来的某些人;
我通过在tableview
中嵌入UIView
并调整UIView
而非tableview
的大小来解决类似的问题。我将tableview's
高度设置为较大的值,并在UIView
上设置“剪辑子视图”属性。我将UIView
调整为与tableview的contentSize
成比例。它不是一个好的解决方案,但它符合我的目的。
答案 7 :(得分:0)
终于找到了解决方案!确实有一个错误!!不要使用 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);
}];
它会像魔法一样工作!