在 UITableViewCell 中叠加 textLabel 和 UIImageView

Posted

技术标签:

【中文标题】在 UITableViewCell 中叠加 textLabel 和 UIImageView【英文标题】:Overlay textLabel and UIImageView in UITableViewCell 【发布时间】:2014-01-09 19:04:34 【问题描述】:

我在将 textLabel 和 detailTextLabel 定位到自定义 UITableViewCell 中时遇到问题,该 UIImageView 出现在 textLabel 和 detailTextLabel 后面。

参考图片 - 它会更有意义 --> 你正在寻找一个 UITableView,其中每个气泡代表一个不同的 UITableViewCell。

本质上,我试图通过扩展气泡尺寸将 textLabel 和 detailTextLabel 放入您看到的气泡中。但是,无论我尝试什么,即使我更改 UIImageView 框架或边界或 contentMode,气泡也不会改变它的宽度和高度。

这是cellForRowAtIndexPath中的相关代码:

//Set font and style        
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];    

// Assign our own background image for the cell
UIImage *cellBackgroundImage = [UIImage imageNamed:@"Chat.png"];

UIImageView *cellBackgroundImageView = [[UIImageView alloc] initWithImage:cellBackgroundImage];
//[cellBackgroundImageView setBounds:CGRectMake(0, 0, 20, 20)];
//[cellBackgroundImageView setImage:cellBackgroundImage];

//cellBackgroundImageView.frame = CGRectMake(cellBackgroundImageView.frame.origin.x,         cellBackgroundImageView.frame.origin.y, 20, 20);
//cellBackgroundImageView.bounds = CGRectMake(cellBackgroundImageView.frame.origin.x, cellBackgroundImageView.frame.origin.y, 0, 0);
cellBackgroundImageView.contentMode = UIViewContentModeScaleAspectFill;

cellBackgroundImageView.image = cellBackgroundImage;
cell.backgroundView = cellBackgroundImageView;

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

这里不用,我是通过在自定义单元格类的LayoutSubviews方法中写图像和标签的框架来实现的。

只是 -(void)layoutSubviews setframe: 两个 UI 组件

【讨论】:

【参考方案2】:

不要使用 Aspect FIll,使用 scaleToFill,或使用 imageCapInsets 将图像设置为图像视图。

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode

对于您的图像,它必须像

UIImage *cellBackgroundImage = [[UIImage imageNamed:@"Chat.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(20, 70, 40, 20) resizingMode:UIImageResizingModeStretch]

【讨论】:

将 UIImage *cellBackgroundImage = [[UIImage imageNamed:@"Chat.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(20, 70, 40, 20) resizingMode:UIImageResizingModeStretch] 放入 cellForRowAtIndexPath 不会调整气泡的大小以包围文本。 而不是设置 cell.backGroundView,尝试将 cellBackgroundImage 作为 subView 添加到 cell.contentView。并设置 cellBackgroundImage UIImageView 的框架,使其包含 textLabel 和 detailTextLabel。并且 cap insets 确保您的气泡图像看起来拉伸后就好了。

以上是关于在 UITableViewCell 中叠加 textLabel 和 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章

通过 dispatch_async 获取图像数据后刷新 UITableViewCell

自定义 UITableViewCell 不会在 setNeedsDisplay 上重绘

matplotlib 笔记:使用TeX标记

如何从 Maxima tex 的输出中删除 TeX 显示的方程标记?

设置 UITableView 单元格的 backgroundView

TeX中的引号