Avi*_*ron 14 iphone cocoa-touch uiscrollview ipad ios
我想创建一个子类,UITableView或UIScrollView将有一些阴影在顶部时,内容偏移> 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)
| 归档时间: |
|
| 查看次数: |
7895 次 |
| 最近记录: |