字体更改时自动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 的高度与您的目标字体匹配,请使用 NSString
的 sizeWithFont
函数。
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,如何在不更改标签框架的情况下根据内容调整字体大小?