使UIView随UITableView滚动但固定在视图顶部

5
我目前有一个视图控制器,包括一个导航栏,后面是一个UIView,其中添加了两个UIButtons作为子视图。然后,在容器UIView底部开始的UITableView。
目前,当用户滚动UITableView时,它会在UIView和UIButtons后面。实际上,我想要的是UIView和UIButtons随着表视图一起移动,但只移动其高度的值,即58像素。流程如下:
1)表格滚动,UIView与其一起移动的前58个像素。
2)用户继续滚动表格,但UIView“固定”在导航栏下方,不可见。
3)当用户向下滚动表格时,UIView将被拾起并拖回视图中。我相信新的Facebook应用程序在时间轴上做了类似的事情。
我不想将UIView设置为表的TableHeaderView,因为我还有一个下拉刷新,然后它会出现在按钮上方,看起来很糟糕。我已经尝试玩弄表的底层滚动视图的contentOffset属性,但卡住了。
任何关于如何开始的建议都将不胜感激。
谢谢
编辑:我已经使用以下代码移动UIView的框架。
-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog (@"Content Offset: %f", self.tableView.contentOffset.y);
    NSLog (@"Button Frame: %f", self.btnBackground.frame.origin.y);

        if (self.tableView.contentOffset.y > 0)
        {
            CGRect newFrame = self.btnBackground.frame;
            newFrame.origin.x = 0;
            newFrame.origin.y = -self.tableView.contentOffset.y;
            [self.btnBackground setFrame: newFrame];
        }  

}

现在的问题是,如果快速滚动表格视图,scrollViewDidScroll代理方法不会立即触发。结果就是当快速滚动时,UIView不能完全返回到其原始位置。


1
嘿,我现在正在尝试解决类似的问题。你最终找到了解决方法吗?@paulmorris - Thomas
相关问题: https://dev59.com/zl8e5IYBdhLWcg3wyMwr - Derek Lee
嘿,我也遇到了类似的情况。设计师想要布局的行为与 Android 中的 CoordinatorLayout 完全相同。顺便问一下,你解决了吗? - Sanif SS
2个回答

1
滚动内容偏移是个好主意。如果你的tableview只有一个section,一种方法是创建自定义的header view来代表顶层的小部件。如果有多个section,可以创建一个额外的空section来返回你的自定义header。
你可以参考这篇stackoverflow帖子。 自定义UITableview Header Section

0

好问题 (y) 对我来说,首先我会使用一个主要的UIScrollView,它包含了你的顶部视图和下面的tableView,并且与你的顶部UIViewUITableView具有相同的宽度,并将其高度设置为height(tableView) + height(topView)。 第二:由于UITableViewUISCrollView的子类,您可以使用scrollViewDidScroll委托来知道tableview是向上滚动还是向下滚动。 在这种情况下,您将有两种情况:

1)tableview向上滚动=>您将设置主滚动视图的内容偏移量为

[scrollView setContentOffset:CGPointMake(0, 58) animated:YES];

2) 当表视图向下滚动时,您可以再次重置内容偏移量

 [scrollView setContentOffset:CGPointMake(0, 0) animated:YES];

谢谢您的回答,但是这并不能自动滚动顶部视图与表格和滚动视图。它需要看起来像UIView是tableView的一部分,并且能够平稳地随着它滚动。 - Paul Morris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接