UITableView和CALayer的混淆 [英] UITableView and CALayer confusion

查看:77
本文介绍了UITableView和CALayer的混淆的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个非常简单的 UITableViewCell 子类。 MyTableViewCell.h

I got a very simple UITableViewCell subclass. MyTableViewCell.h:

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>


@interface MyTableViewCell : UITableViewCell {
    CALayer *backgroundLayer;
}

@end

MyTableViewCell.m

#import "MyTableViewCell.h"
#import <QuartzCore/QuartzCore.h>


@implementation MyTableViewCell


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        backgroundLayer = [[CALayer alloc] init];
        [backgroundLayer setBackgroundColor:[[UIColor yellowColor] CGColor]];
        [[self layer] addSublayer:backgroundLayer];
    }
    return self;
}


- (void)layoutSublayersOfLayer:(CALayer *)layer {
    [backgroundLayer setFrame:[layer frame]];
    [super layoutSublayersOfLayer:layer];
}


- (void)dealloc {
    [backgroundLayer release];
    [super dealloc];
}


@end

Bizarrely,结果如下:。

Bizarrely, here's the result:.

有人可以解释吗?为什么图层不只在所有单元格中绘制,而是仅在第二个单元格中绘制?

Can someone explain this?! Why doesn't the layer paint in all cells but only every second cell?

编辑:这是我的 tableView:cellForRowAtIndexPath:方法:

static NSString *reuseIdentifier = @"cellReuseIdentifier";

MyTableViewCell *cell = (MyTableViewCell *)[aTableView dequeueReusableCellWithIdentifier:reuseIdentifier];

if (cell == nil)
    cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] autorelease];

return cell;


推荐答案

使用此方法可以达到目的:

Using this method did the trick:

- (void)layoutSublayersOfLayer:(CALayer *)layer {
    CGRect frame = [layer frame];
    frame.origin = CGPointZero;
    [backgroundLayer setFrame:frame];
    [super layoutSublayersOfLayer:layer];
}

这篇关于UITableView和CALayer的混淆的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆