我在layoutSubviews
上有一个包含以下代码的自定义单元格:
// Separator Inset
UIImageView *line = [[UIImageView alloc] initWithFrame:CGRectMake(0, 60, 320, 0.5)];
line.backgroundColor = [UIColor blackColor];
[self addSubview:line];
它正确添加了子视图,问题是当我向下滚动并返回子视图时消失。
也许与重复使用细胞有关,但我不确定我错过了什么。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {
static NSString *CellIdentifier = @"ExerciciosCell";
ExerciciosCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (!cell) {
cell = [[ExerciciosCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
更新:
在cellForRowAtIndexPath
NSLog(@"subviews: %d", cell.contentView.subviews.count);`
NSLog(@"%@", cell.contentView.subviews);
结果:
"<UILabel: 0x15dca980; frame = (60 12; 248 21); text = 'Supino Reto Na Maquina'; clipsToBounds = YES; layer = <CALayer: 0x15dab2c0>>",
"<UITableViewLabel: 0x15dd1880; frame = (60 32; 248 18); text = 'Peso: 50 - 3x10 reps'; clipsToBounds = YES; layer = <CALayer: 0x15dc7410>>",
"<UIImageView: 0x15e91ff0; frame = (0 60; 320 0.5); userInteractionEnabled = NO; layer = <CALayer: 0x15ecaa80>>",
"<UIImageView: 0x15dcc730; frame = (5 5; 50 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15db8100>>"
答案 0 :(得分:3)
layoutSubviews
被称为很多次。这不是添加子视图的正确位置。较旧的图像视图正在被较新的图像视图覆盖。
添加子视图的正确位置是init...
方法。
答案 1 :(得分:1)
我在自己的应用程序中注意到,如果行的y偏移量与单元格的高度相同,则在滚动时,单元格底部的一条线会消失。如果我把线(像你的一条高0.5线)放在细胞底部0.5点以上,那么它就不会消失。我猜这与表格处理细胞分离器的方式有关,所以我不知道是否有更好的方法来处理它。
答案 2 :(得分:0)
如果出于某种原因想要在layoutSubviews中维护代码:如何在界面中创建属性:
@interface MyTableViewCell ()
@property (nonatomic, strong) UIImageView *line;
@end
然后在您的实施中:
- (void)layoutSubviews
{
[super layoutSubviews];
if (!self.line)
{
self.line = [[UIImageView alloc] initWithFrame:CGRectMake(0, 60, 320, 0.5)];
self.line.backgroundColor = [UIColor blackColor];
[self addSubview:self.line];
}
}