本文介绍了套打中的行高自适应机制,包括数据表格、布局表格及其嵌套控件(如文本和图片)的行高处理。详细阐述了设计时高度、运行时高度和剩余输出高度的概念,并分析了数据表格行高自适应的逻辑,包括换页处理和尾行处理。同时,对比了行高自适应控件与纵向充满控件的区别,并提供了嵌套图片控件导致的问题及解决方案。最后,提出了简单数据表格和布局表格中行高自适应的注意事项。
套打行高自适应包括数据表格行高自适应、布局表格行高自适应、简单数据表格行高自适应、布局表格嵌套的文本控件行高自适应
<0>前置名词定义
设计时高度:套打模板上对应控件的固定高度
运行时高度/输出高度:套打模板上对应控件的输出高度
剩余输出高度:当前控件位置距离可输出页面最下方边界的高度
<1>数据表格行高自适应
数据表格的行高自适应逻辑:当输出行时,强制要求剩余输出高度大于设计时高度,否则该行无法输出,以下图为例解析,"最终剩余高度"小于"设计时高度显示控件"(等价于小于数据行的设计时高度),所以该行不输出
结论
A、当剩余高度小于设计时高度,无法输出
B、当剩余高度大于设计时高度,可以输出该行,该行换不换页有内容是否能够放的下判断,如果放得下,那么不需要换页,如果放不下,那么需要该行需要申请换页,最终剩余高度仅用作输出每页出现尾行(当每页出现尾行高度为0时,数据行贴下边界,如下图)
推论
A:当一个数据表格数据行需要输出,他的输出高度≥数据行设计时高度
<2>嵌套控件
知识补充:行高自适应控件和纵向充满控件的区别
行高自适应控件就是(在父容器支持调整行高的情况下)行高能够根据自己的内容调整的控件;
而纵向充满的控件是根据其父容器控件扩充高度的控件。
A、文本控件:
我们将文本放入数据表格数据行,放入同样的内容,文本是否会扩充数据行行高
在当前输出行没有其他单元格内容输出不完的情况下,其高度等于设计时高度,对应嵌套的文本控件即使内容输出不完也无法扩充数据行行高,调整其输出高度,所以我们称嵌套在数据表格下的文本控件仅为普通的纵向充满控件(依赖父容器调整高度,自身无法调整)
B、图片控件:
在当前输出行没有其他单元格内容输出不完的情况下,其高度等于设计时高度,但是由于图片过大,将当前行高度扩充为图片大小,也就是说图片(在父容器行高自适应下)能够针对自身的输出内容进行调整,同时调整父容器高度,图片是强制的行高自适应控件。
知识补充2
那么当图片比当前页面还要大,而且数据行设置了行高自适应后,会有什么效果呢?
对应会输出500页,当前图片在每一页都进行输出,同时由于剩余高度小于图片高度,导致其申请换页,换页后图片又重新输出(与文本不一样,文本是剩余内容继续输出,而图片是整个重新输出)
针对嵌套图片控件输出500页如何解决?
PT136657 7.3.1310.2
数据表格数据行增加属性图片不参与行高自适应计算,具体运行逻辑如下:
1)原有逻辑,图片为行高自适应控件,(纵向充满下,拖入控件后默认设置)在数据行行高自适应下数据行行高受图片高度影响
2)图片输出仅为图片控件本身大小,则只需要设置取消纵向充满
3)图片需要受数据行行高控制(对应数据行其他控件行高自适应),但是本身不干预数据行高度,则需要设置图片纵向充满,对应数据行设置图片不参与行高自适应计算
C、简单数据表格
经常有客户会有只设置简单数据表格行高自适应,不设置数据表格数据行的设置,下面以简单数据表格讲解下为什么。
如果不设置行高自适应,套打会认为这个控件的运行时高度和设计时高度是一致的,也就是不会内容扩充,即使其子控件放置什么内容(生活示例:我们有一个足够结实的瓶子,里面有细菌,细菌每天增大一倍,假设现在细菌占了瓶子的一半,那么多久后占满整个瓶子?瓶子两天后会撑大吗?)
所以如果遇到以下情况,为什么会输出这样子?瓶子盖子封紧了。怎么解决?打开瓶盖就好了。
如果需要简单数据表格行高能完全输出完整,则同时需要设置数据表格行高自适应(等价于放权给子控件调整行高度)
D、布局表格
不建议在数据表格中嵌套布局表格而且启用行高自适应,有实现缺陷,下个文章说明原因。
以上就是【套打】套打进阶:数据行行高自适应(数据表格、简单数据表格)的所有内容,如果觉得这篇文章很有意思,麻烦赞和收藏,你的支持和认可是我前进的动力。
推荐阅读