UITableView和CALayer的混淆 [英] UITableView and CALayer confusion
本文介绍了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屋!
查看全文