我在一个ViewController中有2个tableview。两个tableview的单元格高度都不同。
在第一个表格视图中,我是通过 heightForRowAt
委托方法进行计算的,因为在该表格中,单元格的内容是静态的。第二个通过 estimatedHeightForRowAt
委托方法,因为在该表中,单元格的内容是文本(可以是大或小)。
因此问题出在第二个表格视图的单元格高度固定为58。在显示大文本时,该值没有增加。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if tableView == tblHistory{
let h = ((tableView.frame.size.width - 16) * 7 / 5) + 74
return h
}
else{
return 58
}
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
if tableView == tblHistory{
let h = ((tableView.frame.size.width - 16) * 7 / 5) + 74
return h
}
else{
return 58
}
}
注意:我已经正确设置了所有限制条件,以根据文本调整单元格高度。
答案 0 :(得分:2)
问题是文本单元格的高度固定。大文本显示时并没有增加。
您确实必须在情节提要的单元格中的约束方面具有完美的表现。
真的有很多事情要知道。您将必须显示(截屏)单元的情节提要,并显示链接<DataGrid x:Name="datagrid_software" Margin="5" Grid.Row="1" >
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Application" Width="*"/>
<DataGridCheckBoxColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Editeur" Width="Auto"/>
<DataGridCheckBoxColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Installé le" Width="Auto"/>
<DataGridCheckBoxColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Localisation" Width="*"/>
<DataGridCheckBoxColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Taille" Width="Auto"/>
<DataGridCheckBoxColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Version" Width="Auto"/>
<DataGridCheckBoxColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Uninstall" Width="*"/>
</DataGrid.Columns>
</DataGrid>
和其他项目的所有垂直约束。
通常来说,您不应该“固定” UILabel的高度,也不应该“固定” UILabel的整体“链”。如果操作正确,则隐式高度将起作用。
答案 1 :(得分:1)
如果约束设置正确,则无需计算高度。只需为两个表视图返回UITableViewAutomaticDimension
。
答案 2 :(得分:-1)
最佳解决方案是使用 heightForRowAt 中的相同方法计算两个文本的高度:
func heightForText(string: String, width: CGFloat, font: UIFont) -> CGFloat {
let attrString = NSAttributedString(
string: string,
attributes: [NSFontAttributeName: font])
let size = attrString.boundingRect(
with: CGSize(width: width, height: CGFloat.greatestFiniteMagnitude),
options: NSStringDrawingOptions.usesLineFragmentOrigin, context: nil)
return size.height
}