我试图用动画调整tableview的高度,它可以通过动画tableview的frame.size.height来正常工作.
问题是,我有一个200px高度的桌面视图并滚动到底部,我想将其设置为100px的动画,我运行一个简单的
[UIView animateWithDuration:0.245f animations:^{
CGRect frame = tableview.frame;
frame.size.height = 100.f;
tableview.frame = frame;
}];
Run Code Online (Sandbox Code Playgroud)
这工作正常,但在我调整大小后,它不再滚动到tableview的底部.我希望tableview在动画时始终在底部滚动.我尝试了许多不同的东西,如打电话
[tablview scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
Run Code Online (Sandbox Code Playgroud)
在我开始调整大小动画之前/之后,但我还没有设法让它们100%同步.有没有办法调整tableview的大小,而tableview的底部显示scrollview的最后一个元素.
我找到了解决我的问题的方法,很可能有更好的解决方案,但这实际上效果很好:)
在开始制作动画之前,我会查看 contentSize.height 是否大于目标高度,如果是,我会执行以下操作:
if (mMessages.contentSize.height > 150.f)
{
CGFloat expandedOffsetY = 52.f;
CGFloat collapsedBottomOffset = (150.f + 18.f);
CGFloat expandedBottomOffset = (MIN(320.f, mMessages.contentSize.height) + expandedOffsetY);
tableFrame.origin.y = (collapsedBottomOffset - expandedBottomOffset) + expandedOffsetY;
}
else
{
tableFrame.origin.y = 18.f;
tableFrame.size.height = 150.f;
}
Run Code Online (Sandbox Code Playgroud)
这会将 tableview 置于负 origin.y 中,然后我将 tableview 包装在“父”uiview 中,其中剪辑子视图 = YES。
然后我有一个“完成”的动画块,它“重置”到目标值。
CGRect tableFrame = mMessages.frame;
tableFrame.origin.y = 18.f;
tableFrame.size.height = 150.f;
mMessages.frame = tableFrame;
if (mMessages.contentSize.height > tableFrame.size.height)
{
float contentOffsetY = mMessages.contentSize.height - tableFrame.size.height;
mMessages.contentOffset = CGPointMake(0.0f, contentOffsetY);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3429 次 |
| 最近记录: |