【问题标题】:Make UIView scroll with UITableView but pin to top out of view使用 UITableView 使 UIView 滚动但固定到顶部不可见
【发布时间】:2013-04-30 01:29:40
【问题描述】:

我目前有一个view controller,它由一个Navigation bar 组成,然后是一个UIView,其中添加了两个UIButtons 作为子视图。然后在下面有一个UITableView,从容器底部开始UIView

目前,当用户滚动UITableView 时,它会落后于UIViewUIButtons。我真正想要发生的是UIViewUIButtons 与表格视图一起向上移动,但仅通过它们的高度值,在本例中为 58 像素。流程应该是这样的……

1) 表格滚动,UIView 随之移动前 58 个像素。

2) 用户继续滚动表格,但 UIView “pins” 本身在 navigation bar 下方不可见。

3) 当用户向下滚动表格时,UIView 会被拾取并拖回视图中。我相信新的 Facebook 应用在时间轴上做了类似的事情。

我不想将UIView 设置为表格的TableHeaderView,因为我还有一个下拉刷新,然后它位于按钮上方,看起来很糟糕。我尝试过使用表的底层scrollviewcontentOffset 属性,但遇到了障碍。

任何关于从哪里开始的建议将不胜感激。

谢谢

编辑:我更进一步并使用此代码移动 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 在快速滚动时并没有完全回到原来的位置。

【问题讨论】:

  • 嘿,我正在尝试解决类似的问题。你有没有想过该怎么做? @paulmorris
  • 嘿,我也遇到过类似的情况。设计者希望布局的行为与 Android 中的 CoordinatorLayout 完全相同。顺便说一句,你发现了吗?

标签: ios objective-c uitableview uiview scrollview


【解决方案1】:

滚动内容偏移是个好主意。此外,如果您的 tableview 只有一个部分,一种方法是执行表示顶级小部件的自定义标题视图。如果有多个部分,请创建一个额外的空白部分,该部分将返回您的自定义标题。

您可以参考这篇堆栈溢出帖子。 Customize UITableview Header Section

【讨论】:

    【解决方案2】:

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

    1)tableview向上滚动=>你设置主scrollView的内容偏移为

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

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

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

    【讨论】:

    • 感谢您的回答,但这不会使用表格和滚动视图自动滚动顶部视图。这一切都需要看起来像 UIView 是 tableView 的一部分,并且可以平滑滚动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2010-11-07
    • 2012-08-03
    • 2013-02-14
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多