以自定义样式 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 的样式看起来非常像 UITableViewCellStyleValue2
在普通样式的 UITableView 中更改自定义 UITableViewCell 单元格的背景颜色
错误:无法使用自定义单元格类设置 UITableViewCell 标签和图像!只能加载单元格样式的数据:字幕不是自定义的