UITableView can scroll background view
UITableView的backgroundView属性可以设置其背景,但是背景不能随Table的拖动而移动,也就是固定不移动的。有没有办法让其背景也随拖动而移动呢。深入研究了一下UITableView api,好像没有提供这样的api。难道不能实现? google了一天也没有得到好的解决办法。 已经半夜一点过了,问题还没解决,睡不着啊。不知道是不是程序员的灵感时段总是在半夜,在半夜两点的时候,我突然想到了一个办法,试一试给UITableView加一层background layer as background view。于是试了一试,还真有点眉目了。顿时激动了(注意不是鸡动),看来上天眷顾我,这下可以睡个程序员的美容睡了。
原理就是在UITableView的layer加一层image的layer作为背景。代码如下:
- CALayer *bgLayer = [CALayer layer];
- bgLayer.contents = (id)[UIImage imageNamed:@"setting-main-bg"].CGImage;
- bgLayer.anchorPoint = CGPointZero;
- bgLayer.bounds = CGRectMake(0, 0,
- self.scrollBgTableView.contentSize.width ,
- self.scrollBgTableView.contentSize.height + 50);
- CGRect rect = bgLayer.frame;
- rect.origin.y = -50;
- bgLayer.frame = rect;
- [self.scrollBgTableView.layer addSublayer:bgLayer];
- bgLayer.zPosition = -5; //这一句一定要,数值得小于0都可以
scrollBgTableViewj是UITableView类型。在这儿提醒最重要的一步,记得将UITableView的backgroundColor设为clearColor, 不然上面加的图层将被backgroundColor图层覆盖。
- scrollBgTableView.backgroundColor = [UIColor clearColor];
UITableView还有一个比较有用的功能,就是移动列表在Scroll中的位置。如:
- [self.scrollBgTableView setContentInset:UIEdgeInsetsMake(50,0,0,0)];
文字表达不清楚,大家可以用这句代码设置自己的UITableView试试,就知道它的作用了。
有了上面两个知识点,那么就可以做一个可移动的背景了。 下面我手把手教大家如何实现,每一步都必不可少,看清楚了。
1. set the background of the UITableView to clear Color
- scrollBgTableView.backgroundColor = [UIColor clearColor];
2. add image layer as the background layer
- CALayer *bgLayer = [CALayer layer];
- bgLayer.contents = (id)[UIImage imageNamed:@"setting-main-bg"].CGImage;
- bgLayer.anchorPoint = CGPointZero;
- bgLayer.bounds = CGRectMake(0, 0,
- self.scrollBgTableView.contentSize.width ,
- self.scrollBgTableView.contentSize.height + 50);
- CGRect rect = bgLayer.frame;
- rect.origin.y = -50;
- bgLayer.frame = rect;
- [self.scrollBgTableView.layer addSublayer:bgLayer];
- bgLayer.zPosition = -5; //这一句一定要,数值得小于0都可以
好了,如果不行,那只有发源码工程出来了。