JavaFX 中如何获取 TableView 组件的单行高度?
获取TableView单行高度的实现方法
针对你需要累计行高拆分临时表格的需求,有两种常用的实现方案:
- 已渲染场景直接读取高度
如果目标行已经在原TableView中完成渲染,可直接读取对应行的渲染后高度:- iOS平台:通过
tableView:heightForRowAtIndexPath:代理方法返回值获取,或读取已渲染cell的bounds.size.height属性 - 前端JS平台:读取对应行DOM节点的
offsetHeight属性 - Qt/QML平台:调用
rowHeight(index)方法直接获取对应行高
- iOS平台:通过
- 未渲染场景提前离线计算高度
如果需要在条目添加到临时表格前就计算高度避免渲染闪烁,可根据行内容参数手动计算,通用公式为:单行高度 = 文本内容实际高度 + 行上下内边距总和 + 行分割线高度
不同平台有对应的文本尺寸计算API:- iOS:使用
NSString的boundingRectWithSize:options:attributes:context:方法,传入最大宽度、字体等参数计算文本高度 - Android:使用
StaticLayout计算多行文本的实际高度 - 前端:创建隐藏的离线DOM节点,填充对应文本和样式后读取节点高度
- iOS:使用
临时表格拆分注意事项
- 计算总高度时需要把表格自身的上下内边距、表头高度(如果有)纳入统计,不要只统计行高总和
- 建议预留2px左右的容错空间,避免像素四舍五入导致总高度超出490阈值触发滚动条,累计到488左右即可停止当前表格的条目添加
- 如果表格开启了行分割线,每添加一行需要同步累加对应分割线的高度,避免漏算导致总高度偏差
内容的提问来源于stack exchange,提问作者sweet-pineapple
相关产品推荐
相关产品推荐

