在空UITableViewCell
中我有两个UILabel
对齐如下:| --label1 ---- label2-- |。 它们的两个将动态填充。我需要设置约束,使两个标签保持中心对齐,但单元格的高度由具有最多内容的标签决定。
到目前为止:
在ViewDidLoad
:
tableView.rowHeight = 40.0
tableView.estimatedRowHeight = 40.0
UITableViewDelegate
方法:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
问题是我找不到合适的约束设置来达到如下结果:
| --------------------- ------一条较长的信息 - |
| - 一条长信息-------一条较长的信息 - |
| - 一条长信息----- - 更长的消息 - |
| - 长消息-------更长的消息 - |
| - 长消息-------更长message-- |
| ---------------------------更长的信息 - |
或
------------------------更长的信息 - |
| - 消息--- ---------更长的消息 - |
| ------------------------更长的消息 - |
有任何想法吗?我正在使用Swift 1.2
,Xcode 6.3
(和Storyboard
)
谢谢!
答案 0 :(得分:3)
为单元格添加(较低优先级)固定高度约束(例如= 40)。
为每个标签添加顶部和底部约束。使顶部约束成为固定边距(例如= 8)。使底部约束a(更高优先级)大于或等于约束(例如> = 8)。
单元格的高度将由较高的标签决定,所有其他垂直约束仍将满足。
<强>更新强>
事实证明,您不需要为单元格设置固定高度约束,甚至需要调整水平内容拥抱或压缩阻力优先级。
我将标签的顶部和左边或右边固定到superview.margin,= 0,并在标签&gt; = 4之间添加了一个水平空格。
我将标签的下边缘固定到superview.margin,&gt; = 0.我还将两个标签的垂直压缩阻力优先级设置为1000.
此时,我们已设置了最小必要约束。但是,如果两个标签都很长,则一个标签将占据大部分宽度,从而迫使另一个标签非常窄。我随意为两个标签添加了宽度&gt; = 100约束以平衡事情。
在-viewDidLoad
中启用自行调整大小,然后分配标签的文本,让单元格自行调整。没有必要覆盖自定义UITableViewCell
中的任何内容。
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 44.0;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.leftLabel.text = ...;
cell.rightLabel.text = ...;
[cell setNeedsLayout];
[cell layoutIfNeeded];
return cell;
}