我有一个UITableView我正在显示一个自定义单元格。我的单元格我有两个标签&一个视图如下图所示。
我已经像这样给了左视图的约束
商品标签约束
中心视图约束
右视图限制
我使用bean类来存储两个标签和数据的数据。将该bean对象添加到一个数组中。我在heightForRowAtIndexPath中使用下面的代码。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// Calculate a height based on a cell
if(!self.customCell) {
self.customCell = [self.tableView dequeueReusableCellWithIdentifier:@"thirdcell"];
}
// Configure the cell
Instrument *inst=[arr_instSpecs objectAtIndex:indexPath.row];
self.customCell.label_item.text=inst.item;
self.customCell.label_desc.text=inst.desc;
// Layout the cell
[self.customCell layoutIfNeeded];
// Get the height for the cell
CGFloat height = [self.customCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
// Padding of 1 point (cell separator)
CGFloat separatorHeight = 1;
return height + separatorHeight;
}
问题是标签的高度和表视图单元格都没有增加。我已经解释了所有内容。当标签的文字和文字增加时,我想增加标签的大小。当标签尺寸增加时,细胞的高度也必须增加。
答案 0 :(得分:32)
首先,您不应在自动布局环境中手动计算高度。只需将TopSpace和BottomSpace标签设置为单元格的contentView,并确保将NumberOfLines标签设置为0,将LineBreakMode设置为WordWrap。
另一个约束如下,
<强> ItemLabel:强>
<强> SeparatorView:强>
<强> DescriptionLabel:强>
并为高度添加代表,如下所示
#pragma mark - UITableView Delegates
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 44.0;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
你应该得到如下输出,
希望这会对你有所帮助。
答案 1 :(得分:5)
设置行高的自动尺寸&amp;估计行高,确保执行以下步骤,自动尺寸对单元格/行高度布局有效。
{
"locations": [
{
"languageCode": "en",
"openInfo": {
"status": "OPEN",
"canReopen": true
},
"name": "accounts/1337/locations/13161337",
...
}
分配给rowHeight&amp; estimatedRowHeight UITableViewAutomaticDimension
并向其返回值heightForRowAt
)-
目标C:
UITableViewAutomaticDimension
<强>夫特:强>
// in ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property IBOutlet UITableView * table;
@end
// in ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
self.table.dataSource = self;
self.table.delegate = self;
self.table.rowHeight = UITableViewAutomaticDimension;
self.table.estimatedRowHeight = UITableViewAutomaticDimension;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
用于UITableviewCell中的标签实例
注意:如果您有多个动态长度的标签(UIElements),应根据其内容大小进行调整:调整内容拥抱和压缩阻力优先级`对于要以更高优先级扩展/压缩的标签。
答案 2 :(得分:4)
您需要在加载视图时定义最大估计高度
{{1}}
答案 3 :(得分:4)
这就是我的工作方式。
1)设置否。线条为0。
2)设置LineBreakage。
3)添加约束。
4)更改垂直内容拥抱优先级。
5)在ViewDidLoad上:
override func viewDidLoad() {
super.viewDidLoad()
self.sampleTableView.estimatedRowHeight = 600.0;
self.sampleTableView.rowHeight = UITableViewAutomaticDimension;
self.sampleTableView.setNeedsLayout()
self.sampleTableView.layoutIfNeeded()
}
6)在TableView自定义单元格上:
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
sizeToFit()
layoutIfNeeded()
}
答案 4 :(得分:2)
将您的标签约束设置为Cell,Bottom to cell的顶部,并保持您的前导和尾随约束。 在
"conditions":[["Grupper", "EQ", tags]]
通过使用UITableViewAutomaticDimension将根据您的标签内容增加您的tableview单元格高度,最重要的一点是,选择您的标签然后转到Identity Inspector并在行数中写入0
答案 5 :(得分:1)
Swift 3 / Swift 4
自定义单元格:
class CustomCell: UITableViewCell {
@IBOutlet var messageLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
sizeToFit()
layoutIfNeeded()
}
}
viewDidLoad中:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.estimatedRowHeight = 80
self.tableView.rowHeight = UITableViewAutomaticDimension
}
和cellForRowAtIndexPath:
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell : CustomCell = tableView.dequeueReusableCell(withIdentifier: "yourcellIdentifier", for: indexPath) as! CustomCell
cell.messageLabel.text = exampleContent[indexPath.row]
cell.messageLabel.sizeToFit()
cell.messageLabel.layoutIfNeeded()
return cell
}
答案 6 :(得分:0)
Swift 4.2
对于Basic
或Subtitle
类型的单元格,首先在viewDidLoad
中执行以下操作:
self.tableView.estimatedRowHeight = 44 // This is the default cell height
self.tableView.rowHeight = UITableView.automaticDimension
然后选择“标题”并将其行数设置为0。现在,该行将根据“标题”文本调整其高度。您无需执行其他任何操作。
“自定义”单元格类型相同。确保在自定义单元格中使用的标签也设置为0行。
答案 7 :(得分:0)