2011-03-07 81 views
0

有人可以总结有助于解决这个问题的关键Objective-C代码片段。iPhone代码为auto uiLabel&uiTableViewCell字体改变时调整大小?

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

假设是:

  1. 的UITableView已通过 创建一个自定义单元格视图的扩展 - 即在NIB创建一个新的观点,即 形式为 的UITableView单元格的内容视图
  2. 每个定制 单元具有四个UILabel的形成UILabels的 2×2图案 - 在底线上,即顶线2 和两个
  3. 以便用户增加字体 的 UILabels的水平间距将保持不变, 然而,标签的高度会 变化

所以我想挑战/问题,我将包括(并希望通过一些回答有人可以发帖的示例代码)

  1. 可以这里的出发点是在InterfaceBuilder中已经布局的定制UITableViewCell吗? (或者解决方案是否要求它完全以编程方式构建)?
  2. 如何计算标签的高度?这只是与NSString方法“sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:”,我需要添加边距等?
  3. 如何编程,以增加标签的高度动态的 - 在这种方法你做到这一点&如何改变高度本身
  4. 如何保证时的UILabel在顶部展开&的增长,它会自动推下第二排的UILabel?这是默认情况下发生的还是有一个特定的属性/设置你必须确保这个hapen。
  5. 如何在发生上述情况后自动增加TableViewcell的高度。使用哪种方法来执行此操作,以及如何以编程方式执行增加重绘操作。

希望这是有道理的。
感谢

回答

2
  1. 可以立足于厦门国际银行文件作为默认布局,然后在运行时调整后的位置/大小。
  2. 是使用该方法计算所需的高度。您需要在标签之间添加边距。
  3. 更改标签的框架。
  4. 您需要根据第一行的标签+边距x,y,高度来计算第二行标签的x,y。
  5. 钩用下面的方法,并返回新的高度:
    • (CGFloat的)的tableView:(UITableView的*)的tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
+0

谢谢内文 - 我可以澄清:RE项目3:所以只需调整现有标签上的高度是否正确?即不需要创建一个新的替代帧?RE项目4:换句话说,在一个帧中布局UILabel没有简单的方法吗?像布局管理器类型的自动堆栈方法?注意事项5:“cellForRowAtIndexPath”和“heightForRowAtIndexPath”呼叫会一起排队吗?即不会得到一个发生,而不是另一个希望?前者可能会触发后者吗? – Greg 2011-03-07 06:24:35

+0

3.我通常做的是从标签中获取框架,调整它并将调整后的框架分配回标签。 4.我不知道没有雇用第三方库(如果有的话)。没关系 – Nevin 2011-03-07 07:28:41

2

要获得UILabel的高度匹配您的目标字体,您可以使用NSStringsizeWithFont函数。

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

您可能会遇到的问题是,如果文本不能在您定义的边界内水平放置。如果您希望字体相应缩小,请打开调整标记并设置一个这样的分钟。

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