使用UITableView滚动UIView,但将其固定在视图顶部

Pau*_*ris 5 objective-c scrollview uitableview uiview ios

我目前有一个view controller由a组成Navigation bar,后跟一个UIView有两个UIButtons添加为subViews.然后有一个UITableView从容器底部开始的底层UIView.

此刻,当用户滚动UITableView它时,它会在UIView和之后UIButtons.我实际想要发生的是UIViewUIButtons表格视图一起移动,但只能通过它们的高度值,在这种情况下是58像素.流程就像这样......

1)表格滚动以及UIView前58个像素的移动.

2)用户继续滚动表格,但UIView"引脚"本身只是在视图下方navigation bar.

3)当用户向下滚动桌子时,UIView然后拾取并拖回视图.我相信新的Facebook应用程序在时间轴上做了类似的事情.

我不想将其设置UIViewTableHeaderView表格,因为我还有一个拉动刷新然后位于按钮上方并且看起来很糟糕.我已经尝试过使用桌子contentOffset底层的属性,scrollview但是碰到了一堵砖墙.

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

谢谢

编辑:我进一步使用此代码移动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];
        }  

}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如果快速滚动表视图,scrollViewDidScroll委托方法不会被足够快地触发.结果是当快速滚动时,UIView并没有完全回到原来的位置.

Rif*_*nio 0

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

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

[scrollView setContentOffset:CGPointMake(0, 58) animated:YES];
Run Code Online (Sandbox Code Playgroud)

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

 [scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
Run Code Online (Sandbox Code Playgroud)