我有一个下面有UITableView
的UIView
:
我想要做的是当用户开始在表格中滚动时,将UITableView
上方的视图向上移动(离开),以便为UITableView
提供更多空间(并在再次向下滚动时向下移动)。
我知道这通常是通过表头视图完成的,但我的问题是我的表视图在选项卡内(实际上它是使用TTSliddingPageviewcontroller
实现的侧滚页面视图)。因此,虽然我只有一个顶级UIView
,但有三个UITableView
。
是否有可能手动完成此操作?我的第一个想法是把所有东西都放在UIScrollView
里,但是根据苹果的文档,人们永远不应该把UITableView
放在UIScrollView
里,因为这会导致不可预测的行为。
发布于 2014-08-19 08:49:57
因为UITableView
是UIScrollView
的子类,所以您的表视图的委托可以接收UIScrollViewDelegate
方法。
在表视图的委派中:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
static CGFloat previousOffset;
CGRect rect = self.view.frame;
rect.origin.y += previousOffset - scrollView.contentOffset.y;
previousOffset = scrollView.contentOffset.y;
self.view.frame = rect;
}
发布于 2016-10-07 19:38:15
Swift的解决方案(在滚动视图启用反弹的情况下工作得很好):
var oldContentOffset = CGPointZero
let topConstraintRange = (CGFloat(120)..<CGFloat(300))
func scrollViewDidScroll(scrollView: UIScrollView) {
let delta = scrollView.contentOffset.y - oldContentOffset.y
//we compress the top view
if delta > 0 && topConstraint.constant > topConstraintRange.start && scrollView.contentOffset.y > 0 {
topConstraint.constant -= delta
scrollView.contentOffset.y -= delta
}
//we expand the top view
if delta < 0 && topConstraint.constant < topConstraintRange.end && scrollView.contentOffset.y < 0{
topConstraint.constant -= delta
scrollView.contentOffset.y -= delta
}
oldContentOffset = scrollView.contentOffset
}
发布于 2015-07-01 17:56:54
更简单、更快速的方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect rect = self.view.frame;
rect.origin.y = -scrollView.contentOffset.y;
self.view.frame = rect;
}
https://stackoverflow.com/questions/25374090
复制相似问题