以自定义样式 UITableViewCell 自动调整 UILabel

Posted

技术标签:

【中文标题】以自定义样式 UITableViewCell 自动调整 UILabel【英文标题】:Autosize UILabels in custom style UITableViewCell 【发布时间】:2014-06-26 05:31:45 【问题描述】:

我有一个带有两个单元原型的UITableView。一个(上面屏幕截图中的第一个)您可能会识别为 subtitle 样式的标准单元格。第二个是custom,带有一个额外的文本字段。

当我运行该应用程序时,使用第一个模板的标签根据其中文本的大小很好地调整其宽度,而使用自定义模板的标签不会缩放,有效地在三个字符后剪切文本。

有没有办法在 XCode Storyboard 设计器中配置 custom 模板来调整标签的大小,就像内置的 subtitle 单元格模板一样?

【问题讨论】:

为要自定义的 Cell 设置合适的自动布局约束将使其工作。 如何设置每个单元格的高度?我的意思是 tableView:heightForRowAtIndexPath: @Danyun 为什么这很重要?我返回 44 或 88,具体取决于给定单元格正在使用的模板(分别为第一个或第二个) 你是在考虑宽度还是高度?问题可能不同。如果宽度可能是您在自动布局中将“标题”标签设置为固定宽度,因此它无法表达其固有的内容大小。 啊,我知道混乱在哪里了。我说的是宽度。更新了问题以使其明确。 【参考方案1】:

如图设置约束

图片中截断的标签(T..)是TextField。

将单元格的行高设置为最小尺寸为 155。

【讨论】:

【参考方案2】:

试试这个:

您可以根据在文本字段中输入的文本更改标签的大小

-(CGSize)frameForText:(NSString*)text sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode      


NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = lineBreakMode;

NSDictionary * attributes = @NSFontAttributeName:font,
                              NSParagraphStyleAttributeName:paragraphStyle
                              ;
CGRect textRect = [text boundingRectWithSize:size
                                     options:NSStringDrawingUsesLineFragmentOrigin
                                  attributes:attributes
                                     context:nil];
return textRect.size;

调用方法:

CGSize size =[self frameForText:body sizeWithFont:[UIFont systemFontOfSize:14.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:NSLineBreakByWordWrapping];

谢谢

【讨论】:

谢谢,不过我想避免在代码中这样做。当然,通过故事板设计器一定可以实现这一点

以上是关于以自定义样式 UITableViewCell 自动调整 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell为啥会有自动布局约束冲突

自定义 UITableViewCell 的样式看起来非常像 UITableViewCellStyleValue2

在普通样式的 UITableView 中更改自定义 UITableViewCell 单元格的背景颜色

错误:无法使用自定义单元格类设置 UITableViewCell 标签和图像!只能加载单元格样式的数据:字幕不是自定义的

UITableViewCell 样式字幕多行不起作用

在 UITableViewCell 上设置编辑样式而不重新加载单元格