在UITableView滚动时叠加视图滚动

时间:2012-12-27 07:29:50

标签: ios uitableview uiscrollview

我在UIView上方有一个重叠UITableview。当我滚动UITableview时,我希望叠加层UIView以与UITableview滚动相同的速度移动,就像facebook应用的顶层菜单一样。

enter image description here

有什么建议吗? 我尝试在uitableview的scroll delegate中更改叠加uiview的框架。如:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    self.lastOffsetY = scrollView.contentOffset.y;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat offset = self.lastOffsetOfY - scrollView.contentOffset.y;
    CGRect frame = self.overlayview.frame;
    frame.origin.y += offset;
    self.overlayview.frame = frame;
    self.lastOffsetOfY = scrollView.contentOffset.y;
}

只需使用contentoffset值的更改即可。但叠加uiview与uitableview滚动的移动方式不同。

2 个答案:

答案 0 :(得分:2)

如果您只是希望UIView始终保持在屏幕顶部,独立于tableview,您只需将UIView添加到控制器的视图中,而不是将其添加到tableview中。

在你的XIB中,如果你正在使用它,你应该有类似

的东西
VIEW
    UITableView
    UIView

而不是你可能拥有的东西:

VIEW
    UITableView
        UIView

答案 1 :(得分:1)

如果您正在尝试完成类似于Facebook应用的叠加层,那么将叠加层添加到包含UITableView / ScollView的超级视图会更高效。这样,您就不需要编写一堆需要在用户每次滚动时执行的代码。

//in your View Controller:
UITableView *table = [[[UITableview alloc] init] autorelease];
CGRect frame = CGRectMake (tableOriginX, tableOriginY, width, height);
UIView *overlay = [[[UIView alloc] initWithDesieredFrame: frame] autorelease];

这种方式视图永远不会移动,但会给出总是存在于TableView顶部的错觉。如果像Facebook一样,你希望关闭视图,你可以使用TableView的内部手势识别器来检测一个会消除或召唤叠加层的轻弹(如facebook)。

//Something like:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
if (velocity.y > 0)
{
    [self hideButtonPannelData];
}
if (velocity.y  < -0.8)
{
    [self revealButtonPannelData];
}
相关问题