我试图复制 iOS 应用程序Rdio中看到的屏幕大小调整行为。有问题的屏幕提供了所选专辑的概览,并包含上半部分的 UIView 和下半部分的 UITableView。当 tableView 滚动时,它首先向上调整大小以填充屏幕,然后在达到最大高度后开始正常滚动其内容。
经过一番搜索,我发现了这个问题:Dragging UITableView这基本上要求相同的东西,但是它接受的方法与我最初的想法和试验相同,即使用 UIPanGestureRecognizer 并根据翻译调整 tableviews 的高度平底锅。
这不提供我正在寻找的行为。使用此方法仅允许您静态地向上或向下拖动 tableviews 的高度,并且它增加了 panGesture 覆盖 tableViews 的问题,从而阻止滚动内容。
Rdio 应用程序的大小调整行为功能和感觉就像UIScrollView,它具有惯性。您可以一直拖动它,向上或向下轻弹它,它可以平滑地调整大小。当 tableView 达到其全尺寸或原始一半尺寸时,剩余的惯性似乎传递到 tableview 上,导致单元格像通常那样滚动。我知道他们一定是在操纵 UIScrollViews,我只是不知道怎么做。
最后一点,最终我将在这个屏幕上使用 AutoLayout,所以我想知道这将如何潜在地阻碍或帮助这种情况。
更新
这种方法让我最接近我目前正在寻找的行为。向上轻弹 tableView 的行为与我想要的完全一样(用惯性调整大小并在达到最大高度时继续滚动),尽管灵敏度比我想要的要低。然而,向下轻弹不会产生惯性并立即停止。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect scrollViewFrame = scrollView.frame;
CGFloat scrollViewYOffset = scrollView.contentOffset.y;
if (scrollViewFrame.origin.y <= kTableViewMaxYOrigin || scrollViewFrame.origin.y <= _originalTableViewFrame.origin.y)
{
scrollViewFrame.origin.y -= scrollViewYOffset;
if(scrollViewFrame.origin.y >= kTableViewMaxYOrigin && scrollViewFrame.origin.y <= _originalTableViewFrame.origin.y)
{
scrollViewFrame.size.height += scrollViewYOffset;
scrollView.frame = scrollViewFrame;
scrollView.contentOffset = CGPointZero;
}
}
}