青瓷引擎如何进行表格布局?其中有需要注意的地方及相关操作方法是怎样的呢?带着一系列疑问,绿盟小编整理了以下文章「青瓷引擎表格布局相关教程」,详细讲解了包括尺寸提供方式(SizeProvider)、表格布局的样式(Style)、表格生成方式(Constraint)、子节点的分布方式、开始角(Start Corner)等等内容的相关介绍及操作教程,希望能对您有所帮助:
- 表格布局
qc.TableLayout可以挂载在任意节点上,将该节点下的所有可见节点,按一定的宽高进行排布。 在进行布局时,首先根据子节点的数量、大小等信息,计算出表格的列数、行数、单元格的大小,然后将子节点根据设置调整到单元格中进行显示。
var tableLayout = node.addScript('qc.TableLayout');
- 尺寸提供方式(SizeProvider)
进行布局计算时,需要获取或者设置子节点的尺寸,这个尺寸可以通过单元格尺寸(Cell Size的x和y)来设置。
tableLayout.cellWidth = 200;
tableLayout.cellHeight = 160;
如果单元格尺寸cellWidth或cellHeight为0,则取子节点的大小来进行计算,为了获得不同的表现效果,TableLayout提供了两种大小计算方式:
RectTransform:
按原始设计提供尺寸,即只考虑组件的宽高,而忽略缩放,旋转带来的影响。这样一个组件在布局管理其中,缩放、旋转都不会改变当前布局。
tableLayout.contentSizeProvider = qc.TableLayout.USE_RECTTRANSFORM
RealBounds:
实际显示尺寸。即组件在屏幕中显示的包围矩形。改变宽高,缩放,旋转角度都会造成节点大小的变化,进而影响到布局计算。
tableLayout.contentSizeProvider = qc.TableLayout.USE_BOUNDS
具体差异参见下图:

在布局器中使用时

- 表格布局的样式(Style)
在设定好子节点大小的计算方式后,根据是否改变子节点的大小,分为两种表现样式:
包围模式(Wrap Element)
保持子节点的原始大小。进行布局时,根据设置或者子节点的大小,计算出每列的最大宽度和每行的最大高度,设置为表格的单元格大小。
显示内容比较小的子节点不会进行缩放,按原大小显示在单元格中。
tableLayout.style = qc.TableLayout.STYLE_WRAP_ELEMENT

缩放模式(Resize Element)
根据设置的单元格大小,修改子节点的大小,然后按设置进行布局。
显示内容会根据尺寸提供方式,对子节点的宽高进行缩放,使其刚好为单元格的大小。
tableLayout.style = qc.TableLayout.STYLE_RESIZE_ELEMENT

注意:在子节点旋转的情况下,缩放模式带来的效果不可预期。
- 表格生成方式(Constraint)
表格布局提供了三种生成方式:
自适应(Flexible)
根据自身节点的宽高,进行自适应布局,保证表格单元格的尺寸不会超过自身节点的范围。
注意: 使用自适应生成时,需要设置单元格大小(Cell Size),否则无法正确的进行布局。
tableLayout.constraint = qc.TableLayout.CONSTRAINT_FLEXIBLE;
固定列数(Fix Column Count)
根据列数(Column Count)的设置值,生成指定列数,行数可变的表格。此时stride属性代表列数,且需将startAxis设置为qc.TableLayout.AXIS_HORIZONTAL。
tableLayout.constraint = qc.TableLayout.CONSTRAINT_FIX_COLUMN_COUNT;
tableLayout.startAxis = qc.TableLayout.AXIS_HORIZONTAL;
tableLayout.stride = 3; // column count
固定行数(Fix Row Count)
根据行数(Row Count)的设置值,生成指定行数,列数可变的表格。此时stride属性代表行数,且需将startAxis设置为qc.TableLayout.AXIS_VERTICAL。
tableLayout.constraint = qc.TableLayout.CONSTRAINT_FIX_ROW_COUNT;
tableLayout.startAxis = qc.TableLayout.AXIS_VERTICAL;
tableLayout.stride = 3; // row count
- 子节点的分布方式
布局器在确认好生成方式后,会统计所有可显示子节点的数量后,通过计算得到整个表格的大小。 接着,就开始按一定的规则,分配每个单元格对应的子节点。 默认的布局方式是从第一行的左侧开始向右放置子节点,当达到指定列数或者宽度后,从下一行的左侧开始放置,直到所有子节点放置完。 为了适应不同的情况,我们提供了开始角(Start Corner)和放置方向(Start Axis)的编辑。
开始角(Start Corner)
左上(Top Left):将表格左上角的单元格作为第一个单元格,开始分配。
tableLayout.startCorner = qc.TableLayout.CORNER_TOP_LEFT;
右上(Top Right): 将表格右上角的单元格作为第一个单元格,开始分配。
tableLayout.startCorner = qc.TableLayout.CORNER_TOP_RIGHT;
左下(Bottom Left):将表格左下角的单元格作为第一个单元格,开始分配。
tableLayout.startCorner = qc.TableLayout.CORNER_BOTTOM_LEFT;
右下(Bottom Right):将表格右下角的单元格作为第一个单元格,开始分配。
tableLayout.startCorner = qc.TableLayout.CORNER_BOTTOM_RIGHT;
放置方向(Start Axis)
水平方向(Horizontal):确定第一个单元格后,先水平分配子节点,当行分配完成后,则跳到下一行。
tableLayout.startAxis = qc.TableLayout.AXIS_HORIZONTAL;
垂直方向(Vertical):确定第一个单元格后,先垂直分配子节点,当列分配完成后,则跳到下一列。
tableLayout.startAxis = qc.TableLayout.AXIS_VERTICAL;
下面是将5个元素放置在一个3*2的表格中,不同放置方式带来的不同效果:

- 内容的对齐方式(Content Alignment)
上面的内容已经将表格大体上生成了。这个表格的实际显示区域可能比节点的大小不同,那么我们可以通过调节内容的对齐方式,来控制表格相对于节点的对齐方式。可选模式如下:
上边缘对齐(Top): 表格的上边与节点范围的上边对齐。
垂直居中对齐(Middle): 表格的垂直中点与节点范围的垂直中点对齐。
下边缘对齐(Bottom): 表格的下边与节点范围的下边对齐。
左边缘对齐(Left): 表格的左边与节点范围的左边对齐。
水平居中对齐(Center): 表格的水平中点与节点范围的水平中点对齐。
右边缘对齐(Right): 表格的右边与节点范围的右边对齐。
tableLayout.contentAlignment = qc.TableLayout.ALIGN_TOP_LEFT;
tableLayout.contentAlignment = qc.TableLayout.ALIGN_TOP_CENTER;
tableLayout.contentAlignment = qc.TableLayout.ALIGN_TOP_RIGHT;
tableLayout.contentAlignment = qc.TableLayout.ALIGN_MIDDLE_LEFT;
tableLayout.contentAlignment = qc.TableLayout.ALIGN_MIDDLE_CENTER;
tableLayout.contentAlignment = qc.TableLayout.ALIGN_MIDDLE_RIGHT;
tableLayout.contentAlignment = qc.TableLayout.ALIGN_BOTTOM_LEFT;
tableLayout.contentAlignment = qc.TableLayout.ALIGN_BOTTOM_CENTER;
tableLayout.contentAlignment = qc.TableLayout.ALIGN_BOTTOM_RIGHT;
- 内边界(Padding)
当需要表格相对于节点有像素级别的偏移时,可以通过设置Padding的参数来控制。
Left: 距离节点左边界的像素偏移
tableLayout.paddingLeft = 5;
Right: 距离节点右边界的像素偏移
tableLayout.paddingRight = 5;
Top: 距离节点上边界的像素偏移
tableLayout.paddingTop = 5;
Bottom: 距离节点下边界的像素偏移
tableLayout.paddingBottom = 5;
- 单元格的对齐方式(Cell Alignment)
如果使用包围模式,那子节点的大小可能小于单元格的大小,那么我们可以通过调节单元格的对齐方式,来控制子节点相对于单元格的对齐方式。可选模式如下:
上边缘对齐(Upper): 子节点的上边与单元格范围的上边对齐。
垂直居中对齐(Middle): 子节点的垂直中点与单元格范围的垂直中点对齐。
下边缘对齐(Upper): 子节点的下边与单元格范围的下边对齐。
左边缘对齐(Left): 子节点的左边与单元格范围的左边对齐。
水平居中对齐(Center): 子节点的水平中点与单元格范围的水平中点对齐。
右边缘对齐(Right): 子节点的右边与单元格范围的右边对齐。
tableLayout.cellAlignment = qc.TableLayout.ALIGN_TOP_LEFT;
tableLayout.cellAlignment = qc.TableLayout.ALIGN_TOP_CENTER;
tableLayout.cellAlignment = qc.TableLayout.ALIGN_TOP_RIGHT;
tableLayout.cellAlignment = qc.TableLayout.ALIGN_MIDDLE_LEFT;
tableLayout.cellAlignment = qc.TableLayout.ALIGN_MIDDLE_CENTER;
tableLayout.cellAlignment = qc.TableLayout.ALIGN_MIDDLE_RIGHT;
tableLayout.cellAlignment = qc.TableLayout.ALIGN_BOTTOM_LEFT;
tableLayout.cellAlignment = qc.TableLayout.ALIGN_BOTTOM_CENTER;
tableLayout.cellAlignment = qc.TableLayout.ALIGN_BOTTOM_RIGHT;
- 单元格间距(Spacing Size)
默认情况下,单元格是紧密拼接的,这样显示的内容可能太过密集,导致表现不理想。这时可以通过设置单元格间距来调节表现。
x: 单元格间的水平间距,第一个单元格和表格边界间无间距。
tableLayout.spacingX = 5;
y: 单元格间的垂直间距,第一个单元格和表格边界间无间距。
tableLayout.spacingY = 5;
- 特殊表格处理
表格布局为只有一列或者一行的表格添加了一点特殊处理功能:
Ignore X Pos:
当只有一列数据时,可以通过勾选Ignore X Pos,使得布局器在布局时,不去修改子节点的x轴位置,只是调整每个子节点的y轴位置。
此时,可以手动去修改节点的x轴位置。
tableLayout.ignoreX = true;

Ignore Y Pos:
当只有一行数据时,可以通过勾选Ignore Y Pos,使得布局器在布局时,不去修改子节点的y轴位置,只是调整每个子节点的x轴位置。
此时,可以手动去修改节点的y轴位置。
tableLayout.ignoreY = true;

文章来自绿盟(xDowns.com)转载请注明来路。
上一篇文章:iPhone 7 曝光:尺寸不变,但机身更薄不防水 []