关闭

UITableView can scroll background view

2949人阅读 评论(4) 收藏 举报

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

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


源码下载






















1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1545237次
    • 积分:19785
    • 等级:
    • 排名:第433名
    • 原创:385篇
    • 转载:45篇
    • 译文:10篇
    • 评论:438条
    博客专栏
    友情链接
    Java
    Java相关