背景:
我有一个主从视图拆分视图控制器。在详细表视图中,我有一个静态表视图,其中一个单元格仅包含一个 UITextView 以显示客户的评论。
当我在主视图中点击客户名称时,它会读取评论信息并将其设置在 UITextView 中详细视图的 viewWillAppear 中的文本中。同时, UITextView 使用以下代码调整大小:
CGRect frame;
frame = self.detailCustomerCommentUITextView.frame;
frame.size.height = [self.detailCustomerCommentUITextView contentSize].height;
self.detailCustomerCommentUITextView.frame = frame;
[self.tableView reloadData];
该单元格的高度也发生了变化:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat height = 30.0;
if (indexPath.section==3&&indexPath.row==1)
{
height = MAX(self.detailCustomerCommentUITextView.frame.size.height, 30.0);
}else if (indexPath.section == 0 && indexPath.row == 0)
{
height = 55.0;
}else if (indexPath.section == 1 && indexPath.row == 0)
{
height = 47.0;
}
return height;
}
重现问题的步骤:
我第一次点击一个客户 (Customer Short),它有一个简短的评论文本。调整大小的框架为: (CGRect) frame = origin=(x=67, y=-6) size=(width=568, height=32)
我在断点后得到了这个值: self.detailCustomerCommentUITextView.frame = frame;
然后在 heightForRowAtIndexPath 中,我得到了相同的高度:
(CGFloat) 高度 = 32
这看起来不错,但在应用程序中,我在 UITextView 中没有看到任何评论!
我很确定这个文本视图的文本不是空的,因为我已经在调试模式下检查了它。
然后我再次点击同一个客户,在 Break point after:
frame = self.detailCustomerCommentUITextView.frame;
我看到(CGRect)框架=原点=(x=67,y=-6)大小=(宽度=568,高度=10)
这意味着在最后一帧调整为高度“32”后,UITextView 的大小调整为高度“10”。
然后代码运行通过
frame.size.height = [self.detailCustomerCommentUITextView contentSize].height;
self.detailCustomerCommentUITextView.frame = frame;
我看到高度再次设置为 32。但这一次一切都很完美。我看到评论文本和 UITextView 调整大小:
然后我重复了上述步骤,发现一切正常,UITextView 不再调整大小。
问题总结:
在我第一次点击客户 Short 时,为什么 UITextView 在成功调整为高度 32 后调整为高度 10?
我使用了单步调试,但找不到任何其他更改框架的代码。
非常感谢您的帮助。