我在使用高度显示单元格选定图像时遇到问题,高度高于单元格高度。
以下是样本:
所以在这里,我的细胞高度为44,但选定的细胞背景图像高度为50.
我尝试设置单元格选择的背景图像,并将新图像视图添加到单元格作为子视图。但这样做,细胞被选中和图像正在扩大规模以填充细胞高度的大小。因此,箭头出现在单元格内,图像被挤压。
我试过的第二种方法是使用按钮分离箭头图像,但该选项对我来说也不起作用。 如果我采用这种方法,那么按钮就不会显示出来。在这里,我认为该部分正在与表视图的下一行重叠。
请建议我如何解决这个问题。
提前致谢。
答案 0 :(得分:0)
我猜你可以使用单元格或实际表格的Clip Subviews
属性。
您只需将UIImageView
放入单元格(不确定是否可以将其指定为Background属性,但可以尝试)并将其高度设置为大于单元格高度。但唯一的问题是你可能会遇到图像重叠。您可以尝试通过设置实际索引来解决它,以便将视图置于选定状态。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellId = @"cellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];
cell.clipsToBounds = NO;
cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
CGRect frame = cell.bounds;
UIImageView *background = [[UIImageView alloc] initWithFrame:frame];
background.image = [UIImage imageNamed:@"CellBackground"];
cell.backgroundView = background;
[background release];
frame.size.height = 50.0;
UIImageView *selected = [[UIImageView alloc] initWithFrame:frame];
selected.tag = 13;
selected.image = [UIImage imageNamed:@"CellSelectedBackground"];
[cell insertSubview:selected atIndex:1];
selected.hidden = YES;
[selected release];
}
cell.textLabel.text = [NSString stringWithFormat:@"cell %d", indexPath.row];
return cell;
}
这里的主要内容是cell.clipsToBounds = NO;
和[cell insertSubview:selected atIndex:1];
。但是为单元格创建子类并在此处理所有内容和选择会更好。虽然在你的照片中看到你已经使用了子类化细胞:)
答案 1 :(得分:0)
感谢您的所有回复。我已经解决了这个问题,代码在这里:
- (id)initWithStyle:(UITableViewCellStyle)style
reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
[self setClipsToBounds:NO];
// selected background image view
if (self.selectedBgImageView == nil) {
// w 302 : h 50
self.selectedBgImageView = [[UIImageView alloc]
initWithFrame:CGRectMake(0, -5, 302, 50)];
}
[self.selectedBgImageView setContentMode:UIViewContentModeScaleToFill];
[self.contentView addSubview:self.selectedBgImageView];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
// child count label
[self.childCountLabel setBackgroundColor:
[UIColor colorWithPatternImage:
[UIImage imageNamed:@"btn_contacts_network_total"]]];
// selected background image view
if (self.indentationLevel % 2 == 0) {
[self.selectedBgImageView setImage:
[UIImage imageNamed:@"img_contacts_network_expand_box_tier1"]];
}
else {
[self.selectedBgImageView setImage:
[UIImage imageNamed:@"img_contacts_network_expand_box_tier2"]];
}
[self.selectedBgImageView setContentMode:UIViewContentModeScaleToFill];
// [self.con:selectedBgImageView];
}
在那里我发现设置帧是一个问题,我不知道帧起源的这种奇怪计算的原因。但不知何故,它对我有用,并且按照要求完美运行。
如果有人知道这种行为背后的原因,请指导我。