我有一个自定义表格单元格,其中包含 3 个标签、一个按钮和一个 UITextView。
UITextView 的文本仅在运行时知道,因为它是我从服务器中提取的数据。
我正在尝试根据我放入 UITextView 的文本将我的 UITextView 和我的自定义表格单元格调整为正确的高度。
UITextView 的文本在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法中设置。
在这里,我尝试使用以下方法调整 UITextView (bodyTextView) 的大小。
CGSize stringSize = [cell.bodyTextView.text sizeWithFont:cell.bodyTextView.font constrainedToSize:CGSizeMake(cell.bodyTextView.bounds.size.width, 9999) lineBreakMode:NSLineBreakByWordWrapping];
[cell.bodyTextView setText:threadMessage.body];
CGRect bodyFrame = cell.bodyTextView.frame;
bodyFrame.size = cell.bodyTextView.contentSize;
[cell.bodyTextView setFrame:bodyFrame];
这或多或少似乎工作正常,因为我的 UIButton 没有向下移动到它应该移动的位置,即使它在我的 UITextView 底部有一个“Top Space To”约束。我原以为它会自动移动。但是,我可以通过编程将其移动到适当的位置,所以没什么大不了的。
下一段代码确实将 tableViewCell 调整为适当的高度以适合标签和 UITextView,但底部的按钮没有足够的空间。接下来我计算单元格的高度并使用以下命令返回它......
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath
{
CGSize stringSize = [threadMessage.body sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(280, 9999) lineBreakMode:NSLineBreakByWordWrapping];
float oldHeight = 28;
float newHeight = stringSize.height;
return tableView.rowHeight - oldHeight + newHeight;
}
正如你所看到的,我在 UITextView 高度和新高度之间做了一个高度差。我试图以编程方式获取 oldHeight,但我得到了成千上万的疯狂值。
最大的问题是,当视图首次显示时,行的大小或多或少是正确的。但是 UITextView 没有大小。如果我滚动以将其移出屏幕然后再滚动回来,则 UITextView 的大小正确。但是,如果我再次滚动它并返回屏幕,它会再次将自身调整为单行。
我觉得我有鸡或蛋的事情,无法解决这个问题。
我希望弄清楚的两个主要问题是:
1 ) 如何让 UITextView 从一开始就正确调整大小并保持这种状态,而不管屏幕是否滚动?
2 ) 如何让我的自定义 TableCellView 调整大小以包含按钮的高度?
我希望这一切都有意义,并且我已经提供了足够的细节。让我知道任何问题。
任何建议将不胜感激。谢谢!
问候,
彼得