字体更改时自动uiLabel和uiTableViewCell调整大小的iphone代码?

Posted

技术标签:

【中文标题】字体更改时自动uiLabel和uiTableViewCell调整大小的iphone代码?【英文标题】:iphone code for auto uiLabel & uiTableViewCell resizing when font changed? 【发布时间】:2011-03-07 05:08:41 【问题描述】:

有人可以总结一下有助于解决这个问题的 Objective-c 代码的关键部分吗?

目标 - 在用户更改字体大小后自动调整 UITableView 的大小。因此,如果用户增加或减少字体,(a) uiLabel 高度都应该改变以确保它们很好地包含文本,并且 (b) uiTableViewCell 高度也应该调整。

假设是:

    UITableView 已通过扩展 创建自定义单元格视图 - 即在 NIB 中创建一个新视图 内容视图的表单 UITableView 单元格 每个自定义 单元格有四个 UILabel,它们形成一个 2 x 2 模式的 UILabels - 即两个 在顶线,两个在底线 所以随着用户增加字体 的水平间距 UILabels 将保持不变, 但是标签高度会 改变

所以我假设我所面临的挑战/问题将包括(并希望有人可以发布一些示例代码来回答)

    这里的起点可以是InterfaceBuilder中已经布局好的自定义UITableViewCell吗? (或者解决方案是否需要完全以编程方式构建)? 如何计算标签的高度?这只是使用 NSString 方法“sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:”,我是否需要添加边距等? 如何以编程方式动态增加标签的高度 - 您使用哪种方法以及如何更改高度本身 如何确保当顶部的 UILabel 扩展和增长时,它会自动下推第 2 行的 UILabel?这是默认情况下发生的,还是您需要特定的属性/设置来确保发生这种情况。 发生上述情况后,如何自动增加 TableViewcell 的高度。在哪种方法中执行此操作,以及如何以编程方式执行增加和重绘。

希望这是有道理的。 谢谢

【问题讨论】:

【参考方案1】:
    您可以基于 XIB 文件作为默认布局,然后在运行时稍后调整位置/大小。 是的,使用该方法计算所需的高度。您需要自己在标签之间添加边距。 更改标签的框架。 您需要根据第一行标签的 x,y,height + 边距计算第二行标签的 x,y。 使用以下方法挂钩并返回新高度: (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

【讨论】:

感谢 Nevin - 我可以澄清一下:RE ITEM 3:所以只需正确调整现有标签上的高度吗?即不需要创建一个新的替换框架?,RE ITEM 4:那么换句话说,没有简单的方法在框架内布局 UILabels 吗?像布局管理器类型的自动堆叠方法? RE ITEM 5:“cellForRowAtIndexPath”和“heightForRowAtIndexPath”调用可以一起排列吗?即不会发生一个,而不是希望另一个?前者会触发后者吗? 3.我通常做的是从标签中获取框架,调整它并将调整后的框架分配回标签。 4. 我不知道如果不使用第 3 方库(如果有的话)。 5.没关系【参考方案2】:

要使 UILabel 的高度与您的目标字体匹配,请使用 NSStringsizeWithFont 函数。

NSString *myText = @"Go Hokies";
UIFont *myFont = [UIFont boldSystemFontOfSize:15];
CGFloat lineHeight = [myText sizeWithFont:myFont].height;

您可能会遇到的问题是,如果文本水平不适合您定义的边界。如果您希望字体相应缩小,请打开调整标志并像这样设置一个最小值。

myUILabel.minimumFontSize = 10;
myUILabel.adjustsFontSizeToFitWidth = YES;

【讨论】:

以上是关于字体更改时自动uiLabel和uiTableViewCell调整大小的iphone代码?的主要内容,如果未能解决你的问题,请参考以下文章

自动布局 - UILabel 在方向更改后宽度缩小,这是由另一个应该自动调整字体大小的 UILabel 引起的

具有自动布局的多行UILabel,如何在不更改标签框架的情况下根据内容调整字体大小?

更改文本时 UILabel 中等宽字体的奇怪行为

iOS 10中的UILabel,制作文字字体

禁用 UILabel、UIText 等的自动调整字体。在 iOS/Swift 中?

UILabel 颜色和字体大小从 XIB 更改