调整UITableView高度,并保持在底部滚动

Mad*_*sen 6 ios

我试图用动画调整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的最后一个元素.

Mad*_*sen 2

我找到了解决我的问题的方法,很可能有更好的解决方案,但这实际上效果很好:)

在开始制作动画之前,我会查看 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)