是否可以将固定内容添加到UIScrollView?

Avi*_*ron 14 iphone cocoa-touch uiscrollview ipad ios

我想创建一个子类,UITableViewUIScrollView将有一些阴影在顶部时,内容偏移> 0,表示内容是滚动的.(见附图) 在此输入图像描述

我现在实现它的方式是使用UIViewController它的代表tableView.我只是GradientView在它上面tableView,我拦截scrollViewDidScroll:动画顶部渐变的可见性.

我的这个实现的问题是它不是"干净".我希望我UIViewControllers能够处理逻辑,而不是应用渐变和东西.我希望我可以删除一个子类UITableView来为我做这件事.

我面临的挑战是,我无法弄清楚如何在tableView可滚动内容之上添加固定内容.

另一个问题是UIScrollView我应该覆盖什么方法来拦截滚动事件.显然我不希望tableView成为自己的委托......

有任何想法吗?

谢谢!

Avi*_*ron 29

好的,所以我在Apple的WWDC 2011 Session 104视频 - 高级滚动视图技术上找到了解决方案.

此视频中有一节关于滚动视图中的"固定视图".根据Apple的说法,这里的方法是覆盖layoutSubviews并将所有代码放在任何你想要的位置 - 无论你想要什么.

我尝试了它,它实际上非常简单,它按预期工作.

因此,例如,如果我想在滚动内容时在表顶部使用阴影标题,这就是我应该编写的代码:

-(void) layoutSubviews
{
    [super layoutSubviews];
    [self positionTopShadow];
}

-(void) positionTopShadow
{
    CGFloat yOffset = self.contentOffset.y;
    // I'm doing some limiting so that the maximum height of the shadow view will be 40 pixels
    yOffset = MIN(yOffset, 40);
    yOffset = MAX(0, yOffset);

    CGRect frame = self.topShadowView.frame;
    // The origin should be exactly like the content offset so it would look like
    // the shadow is at the top of the table (when it's actually just part of the content) 
    frame.origin = CGPointMake(0, self.contentOffset.y);
    frame.size.height = yOffset;
    frame.size.width = self.frame.size.width;
    self.topShadowView.frame = frame;

    if (self.topShadowView.superview == nil)
    {
        [self addSubview:self.topShadowView];
    }
    [self bringSubviewToFront:self.topShadowView];
}
Run Code Online (Sandbox Code Playgroud)