现在的位置: 首页 > 综合 > 正文

UITableView can scroll background view

2014年08月29日 ⁄ 综合 ⁄ 共 1695字 ⁄ 字号 评论关闭

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都可以

好了,如果不行,那只有发源码工程出来了。微笑

源码下载

抱歉!评论已关闭.