我正在使用包含两个UILabel的单元格填充我的UITableView:其中一个是标题,另一个是内容。我正在计算他们在heightForRowAtIndexPath中的大小:在我改变方向之前,一切看起来都很酷。当我更改方向时,每个标签的大小似乎没有变化。例如,如果我从纵向更改为横向,则预期的行为是看到标签具有较小的高度(假设它是多行标签)。然而,标签的高度保持不变,我得到一个丑陋,迷失方向的观点。我为此编写的代码如下:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CGFloat tableWidth = [tableView bounds].size.width;
ListItem* glossaryItem;
if ([tableView isEqual:self.searchDisplayController.searchResultsTableView])
{
glossaryItem =(ListItem*)[self.searchResults objectAtIndex:indexPath.row];
}
else
{
glossaryItem =(ListItem*)[self.glossary objectAtIndex:indexPath.row];
}
NSString* name = [NSString stringWithFormat:@"<p><b>%@</b> :</p>", glossaryItem.name];
NSString* content = glossaryItem.details[0];
NSAttributedString* nameWithStyle = [HTMLParser parseText:name withFontSize:16 withFontType:@"Light"];
NSAttributedString* contentWithStyle = [HTMLParser parseText:content withFontSize:16 withFontType:@"Light"];
CGRect nameRect = [nameWithStyle boundingRectWithSize:CGSizeMake(screenWidth - 40, CGFLOAT_MAX) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:NULL];
CGRect contentRect = [contentWithStyle boundingRectWithSize:CGSizeMake(screenWidth - 40, CGFLOAT_MAX) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:NULL];
return nameRect.size.height + contentRect.size.height + 33;
}
HTMLParser是我编写的一个类,用于将HTML格式的文本解析为属性字符串。我猜这里的问题是方向改变后标签的尺寸没有重新计算。如果我添加以下代码,一切看起来都很好,但这对于包含大量单元格的表来说需要花费太多时间。
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
[self.tableView reloadData];
}
我该如何解决这个问题?如果需要,我可以提供标签的约束。
答案 0 :(得分:0)
设置autoLayout约束 或者,继续按照你在didRotate上的方式调用reloadData ... 但请在cellForRow中标注大小......如下所示
仅在heightForRowAtIndexPath
中设置行的高度 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//Some identifier and recycling stuff
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
//Make labels smaller
}
else {
//Make them longer
}
// save the calculated height for the label
//并在heightForRowAtIndexPath中相应调整tableviewrow高度 }