【问题标题】:Overlay view scroll as UITableView scrollsUITableView 滚动时覆盖视图滚动
【发布时间】:2012-12-27 07:29:49
【问题描述】:

我在UITableview 上方有一个覆盖UIView。当我滚动 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 滚动不同。

【问题讨论】:

  • 我添加了一些我自己的代码@H2CO3
  • 谢谢。只是好奇:self.lastOffsetOfY 在呈现视图之前是否已初始化?此外,是否没有可能干扰此方法的滚动视图?如果您输入if ([scrollView isEqual:tableView]) 之类的支票怎么办?
  • 我在scrollViewWillBeginDragging 中初始化了self.lastOffsetOfY,除了同一个父uiview之外没有其他视图
  • 奇怪。我看不出代码有什么问题。我稍后再试试。
  • 亲爱的@keywind,您可以在UITableview 的superview 上添加您的UIView

标签: ios uitableview uiscrollview


【解决方案1】:

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

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

VIEW
    UITableView
    UIView

而不是你可能拥有的:

VIEW
    UITableView
        UIView

【讨论】:

  • 是的..它在一个 tableviewcontroller 中,我正在做 [self addSubview] 所以我的覆盖是 tableviewcontroller 的一个孩子
【解决方案2】:

如果您尝试完成类似于 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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多