gpt4 book ai didi

ios - tableview ios 中带有 UILabel 的单元格的动态高度

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

我正在开发一个显示消息和用户图像的聊天应用程序。我有一个表格 View 和一个自定义单元格。单元格有一个 UIlabel 和 UIImage。我尝试了各种方法来根据标签的内容文本动态调整单元格高度。我在 Storyboard本身中设置了 numberofLines=0 并将单元格高度设置为常量,以便可以容纳多行.但它不显示多行,至于高度,我使用了自动尺寸但效果不佳。我还使用了以下 link 我正在使用类型为 messageTableViewCell 的自定义单元格,其中具有标签属性。

这是快照:- image

我在 viewcontroller.m 中的代码

- (void)viewDidLoad
{

self.tableView.estimatedRowHeight = 100.0;

self.tableView.rowHeight = UITableViewAutomaticDimension;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

messageTableViewCell *cell = [self.messageTableView dequeueReusableCellWithIdentifier:@"cell"];

if (cell == nil)
{
cell = [[messageTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}

cell.messageLabel.text = [_messages objectAtIndex:indexPath.row];
cell.messageLabel.lineBreakMode = NSLineBreakByWordWrapping;
cell.messageLabel.numberOfLines=0;
[cell.messageLabel sizeToFit];
return cell;
}

编辑

我在单元格中插入了一个 TextView ,而不是标签并将其修改为:

- (void)textViewDidChange:(UITextView *)textView
{
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
textView.frame = newFrame;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath
{
static messageTableViewCell *sizingCell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sizingCell = [self.messageTableView dequeueReusableCellWithIdentifier:@"cell"];
});

sizingCell.textMessage.text=_messages[indexPath.row];
CGFloat fixedWidth = sizingCell.textMessage.frame.size.width;
CGSize newSize = [sizingCell.textMessage sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = sizingCell.textMessage.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
CGFloat height= newFrame.size.height;
NSLog(@"%f is height ",height);
return height+5.0f;
}

但它也不起作用,它切断了文本的上半部分。

最佳答案

如果您使用的是 iOS 8 以上版本,请试试这个。它对我有用。

cell.messageLabel.text = [_messages objectAtIndex:indexPath.row];
cell.messageLabel.lineBreakMode = NSLineBreakByTruncatingTail;
cell.messageLabel.numberOfLines=0;
return cell;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 10.0;
}

关于ios - tableview ios 中带有 UILabel 的单元格的动态高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28281192/

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