我从远程网址获取UILabel文本,有时文本太短/太长,我需要调整框架大小到文本高度。
我使用xib
实现了服装单元格。
这是我到目前为止所尝试的,它应该有效,但由于我无法理解的原因而无法工作:
cell.fbLastObject.text = [NSString stringWithFormat:@"%@",update.fbLastObject];
[cell.fbLastObject sizeToFit];
//Cell Size
CGSize labelSize = [cell.fbLastObject.text sizeWithFont:cell.fbLastObject.font
constrainedToSize:cell.fbLastObject.frame.size
lineBreakMode:NSLineBreakByWordWrapping];
labelHeight = labelSize.height;
cell.fbLastObject.frame = CGRectMake(0,0,300,labelHeight);
任何人都有任何想法?
答案 0 :(得分:1)
对于iOS 8 and later
,您可以使用UITableViewAutomaticDimension
将以下代码放在viewDidLoad
中:
tableView.rowHeight = UITableViewAutomaticDimension;
/* any estimated height but must be more than 2 */
tableView.estimatedRowHeight = 160.0;
tableview.delegate = self;
tableview.dataSource = self;
// you have created the SimpleTableViewCell.xib, So you need to register that cell with table.
UINib *nib = [UINib nibWithNibName:@"SimpleTableViewCell" bundle:nil];
[tableview registerNib:nib forCellReuseIdentifier:@"SimpleTableViewCell"];
现在为超级视图&添加适当的cell fbLastObject
约束(顶部,底部,前导和尾部)引脚将行数设置为0
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"SimpleTableViewCell";
SimpleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
// here set text for your cell label
cell.fbLastObject.text = @"My Text";
[cell setNeedsLayout];
[cell layoutIfNeeded];
return cell;
}
答案 1 :(得分:0)
你可以试试self.tblView.rowHeight = UITableViewAutomaticDimension;
对于使用自动布局的动态单元格
答案 2 :(得分:0)
你可以通过映射UILabel的高度约束来计算远程网址的文本大小,并根据计算出的行的高度返回高度,并将该高度赋予映射的高度约束出口,并在返回单元格之前写入: -
[cell.UILabel updateConstraints];
答案 3 :(得分:0)
在您的问题中,您获取标签尺寸的步骤很好。将Label的属性SizeToFit和NumberOfLines设置为0,并为其添加适当的约束。然后为Label的Height约束创建一个NSLayoutConstraint实例,并将其附加到UITableViewCell的底部。然后,当您从文本中获得CGSize时,您需要在self上调用UpdateConstraintIfNeeded,然后需要为该Label的约束&设置高度常量属性。需要设置UITableVIew的heightForRowAtIndexpath。 希望这会奏效。