gpt4 book ai didi

ios - 在 UITableViewCell 中扩展 UITextView

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:32 24 4
gpt4 key购买 nike

SO 上有十几个类似的问题,但似乎没有就最佳方法达成共识。此外,我还没有找到任何适合我的解决方案。与我的自定义 UITableViewCell 不同的是,我有两个标签,其中一个在它自己的 View 中,还有一个 TextView 。所有这三个都应该扩展到他们的内容。

我想知道我的约束是否设置不正确,但我不确定我要调整什么。

这是我在 IB 的手机。

cell in IB

内容 View 是浅红色的,顶部的额外 View 是白色的,里面有一个标签。

当文本更改时,我保存文本并更新 tableView:

-(void)textViewDidChange:(UITextView *)textView
{
NSLog(@"row: %i", textView.tag);
[self.textStrings setObject:textView.text atIndexedSubscript:textView.tag];
[self.tableView beginUpdates];
[self.tableView endUpdates];
}

对于 tableView:heightForRowAtIndexPath: 方法,我使用缓存的高度值(选定行除外)。在这种情况下,我将创建一个新单元格,对其进行配置,然后使用 systemLayoutSizeFittingSize: 获取高度。这似乎是最常见的solution .

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// use cached height if there is one (and it isn't the selected row)
if ([self.selectedRow integerValue] != indexPath.row && indexPath.row < [self.rowHeights count]){
return [[self.rowHeights objectAtIndex:indexPath.row] floatValue];
}

static NSString *CellIdentifier = @"RMTextViewCell";
RMTextViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
[self configureCell:cell forIndexPath:indexPath];

[cell layoutIfNeeded];

CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
height += 1; // add 1 for border

NSNumber *h = @(height);
[self.rowHeights setObject:h atIndexedSubscript:indexPath.row];

return height;
}

textView 确实扩展了,但是当它转到多行时,顶部标签开始被剪裁。在某些版本中,当文本更改时,我让 textView 开始裁剪/扩展。自动布局似乎不确定如何正确计算单元格的高度。

有什么想法吗?

这是我的 Github project它里面有一些实验。重要的文件是 ViewControllers/RMTextViewTableViewControllerCell/RMTextViewCell。如果您运行它,请查看“带文本的动态单元格”。

最佳答案

似乎这可能是一个 iOS 错误,因为我希望 UITextView 的高度将包含在 UILabels 中,当它位于单元格的 contentView 中并且我们使用 systemLayoutSizeFittingSize 时。无论如何,正如 user501836 所说,您可以手动计算 textView 的高度。然后,您需要将其添加到为您的 contentView 计算的高度。这是我如何在 tableView:heightForRowAtIndexPath 中计算单元格高度的示例:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{

CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

CGSize textViewSize = [[cell textView] sizeThatFits:CGSizeMake([[cell textView] frame].size.width, FLT_MAX)];

height += textViewSize.height;

return height;

}

关于ios - 在 UITableViewCell 中扩展 UITextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21886578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com