3

UIViewUITableview. 当我滚动时UITableview,我希望覆盖 UIView以与滚动相同的速度移动UITableview,就像 facebook 应用程序的顶部菜单一样。

在此处输入图像描述

有什么建议么?我尝试在 uitableview 的滚动委托中更改覆盖 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 滚动不同。

4

2 回答 2

2

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

在您的 XIB 中,如果您使用的是一个,您应该有类似的东西

VIEW
    UITableView
    UIView

而不是你可能拥有的:

VIEW
    UITableView
        UIView
于 2013-01-18T19:10:54.093 回答
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];
}
于 2013-03-27T18:12:36.063 回答