根据 UITableViewCell 标签高度和宽度调整背景图片大小
Posted
技术标签:
【中文标题】根据 UITableViewCell 标签高度和宽度调整背景图片大小【英文标题】:Resize background image based on UITableViewCell Label height and width 【发布时间】:2017-04-18 11:21:56 【问题描述】:我可以根据文本调整自定义UITablleViewCell
标签的宽度和高度。如下所示。
现在我想将下面的聊天气泡图像设置为标签作为背景,以便气泡根据标签文本调整其大小,并提供类似于其他信使的气泡效果。
以下是我将图像设置为标签背景的代码。
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
return UITableViewAutomaticDimension;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
return UITableViewAutomaticDimension;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *simpleTableIdentifier = @"ChatConversationTableViewCell";
ChatConversationTableViewCell *cell = (ChatConversationTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ChatConversationTableViewCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.chatmsgLabel.text = [chatHistoryArr objectAtIndex:indexPath.row];
cell.timeAndDateMsgLabel.text = [timeAndDateMsgArr objectAtIndex:indexPath.row];
UIImage *img = [UIImage imageNamed:@"bubble2.png"];
CGSize imgSize = cell.timeAndDateMsgLabel.frame.size;
UIGraphicsBeginImageContext( imgSize );
[img drawInRect:CGRectMake(0,0,imgSize.width,imgSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
cell.timeAndDateMsgLabel.backgroundColor = [UIColor colorWithPatternImage:newImage];
return cell;
输出看起来像
我的预期输出是
下面是我的 CustomTableViewCell 及其约束的更多信息
我尝试了很多来实现输出,但我无法弄清楚。是否有任何其他方法可以实现输出,我准备遵循任何适合我要求的方法。任何帮助将不胜感激。
【问题讨论】:
查看此链接可能会对您有所帮助:***.com/questions/31823130/… 您可以查看此项目作为参考:github.com/jessesquires/JSQMessagesViewController。可能对您有所帮助。这个控件很好地拉伸了图像。 您需要将相同颜色的背景设置为 label 而不是 image 。并给予该标签大于等于的约束。 【参考方案1】:要解决这个问题,您可以将所有 imageView 约束设置为零。 然后您可以在 .xassets 文件中添加图像,然后使用切片图像。这将在必要时拉伸图像并缩小它。
切片由你决定。
希望对你有帮助。
【讨论】:
有趣的是,我想实现您提到的上述 ui,但我的 tableviewcell 中没有任何 imageview 来设置约束。我已将 imageview 设置为 UITableViewCell 中标签的背景。有什么建议您如何设置图像视图? 查看我更新的答案。我给出了故事板的图像。我在单元格中获取了图像视图,并在图像视图中获取了文本级别。 请注意,您可以一劳永逸地创建“切片”图像(查看 UIImage 的文档(带有“可拉伸”的部分)。这应该避免您一直使用重新创建图像UIGraphicsBeginImageContext()
.
感谢您的建议。尝试了您的方法,但没有运气。
github.com/rubaiyat6370/ios/blob/master/… 查看这个项目。希望对您有所帮助。 @马杜【参考方案2】:
您可以通过以下方式解决问题;
-
创建一个 UIView。
为其设置背景。
在此 UIView 中添加您的标签。
将此视图的所有约束设置为零。
这可以解决你的问题
【讨论】:
【参考方案3】:执行以下步骤:
获取一个 UIView(比如 myView)并给出它的约束和清除背景颜色。
顶部底部尾随到超级视图。 导致具有关系<=
和中等优先级的superview。
宽度常数与关系 >=
和优先级高于前导。
身高与关系>=
。
现在在 myView 中添加带有约束的 ImageView,
前导、尾随顶部、底部到超级视图。为 text_mesage、时间添加标签,在 myview 中看到并相应地给出约束。
现在运行您的项目并检查。如果仍然有任何问题,请告诉我。
【讨论】:
以上是关于根据 UITableViewCell 标签高度和宽度调整背景图片大小的主要内容,如果未能解决你的问题,请参考以下文章
根据 iOS SWIFT 高度更高的 UIImageView 或 UILabel 设置 UITableViewCell 高度
我需要设置 UITableViewCell 动态高度,带有 UIImageView 的多个动态标签