fix: justify row flex boundary error #577
This commit is contained in:
@@ -1599,27 +1599,8 @@ export class Draw {
|
|||||||
(i !== 0 && element.value === ZERO)
|
(i !== 0 && element.value === ZERO)
|
||||||
// 是否宽度不足导致换行
|
// 是否宽度不足导致换行
|
||||||
const isWidthNotEnough = curRowWidth > availableWidth
|
const isWidthNotEnough = curRowWidth > availableWidth
|
||||||
|
// 新行数据处理
|
||||||
if (isForceBreak || isWidthNotEnough) {
|
if (isForceBreak || isWidthNotEnough) {
|
||||||
// 换行原因:宽度不足
|
|
||||||
curRow.isWidthNotEnough = isWidthNotEnough && !isForceBreak
|
|
||||||
// 两端对齐、分散对齐
|
|
||||||
if (
|
|
||||||
preElement?.rowFlex === RowFlex.JUSTIFY ||
|
|
||||||
(preElement?.rowFlex === RowFlex.ALIGNMENT && isWidthNotEnough)
|
|
||||||
) {
|
|
||||||
// 忽略换行符及尾部元素间隔设置
|
|
||||||
const rowElementList =
|
|
||||||
curRow.elementList[0]?.value === ZERO
|
|
||||||
? curRow.elementList.slice(1)
|
|
||||||
: curRow.elementList
|
|
||||||
const gap =
|
|
||||||
(availableWidth - curRow.width) / (rowElementList.length - 1)
|
|
||||||
for (let e = 0; e < rowElementList.length - 1; e++) {
|
|
||||||
const el = rowElementList[e]
|
|
||||||
el.metrics.width += gap
|
|
||||||
}
|
|
||||||
curRow.width = availableWidth
|
|
||||||
}
|
|
||||||
const row: IRow = {
|
const row: IRow = {
|
||||||
width: metrics.width,
|
width: metrics.width,
|
||||||
height,
|
height,
|
||||||
@@ -1670,6 +1651,29 @@ export class Draw {
|
|||||||
}
|
}
|
||||||
curRow.elementList.push(rowElement)
|
curRow.elementList.push(rowElement)
|
||||||
}
|
}
|
||||||
|
// 行结束时逻辑
|
||||||
|
if (isForceBreak || isWidthNotEnough || i === elementList.length - 1) {
|
||||||
|
// 换行原因:宽度不足
|
||||||
|
curRow.isWidthNotEnough = isWidthNotEnough && !isForceBreak
|
||||||
|
// 两端对齐、分散对齐
|
||||||
|
if (
|
||||||
|
preElement?.rowFlex === RowFlex.JUSTIFY ||
|
||||||
|
(preElement?.rowFlex === RowFlex.ALIGNMENT && isWidthNotEnough)
|
||||||
|
) {
|
||||||
|
// 忽略换行符及尾部元素间隔设置
|
||||||
|
const rowElementList =
|
||||||
|
curRow.elementList[0]?.value === ZERO
|
||||||
|
? curRow.elementList.slice(1)
|
||||||
|
: curRow.elementList
|
||||||
|
const gap =
|
||||||
|
(availableWidth - curRow.width) / (rowElementList.length - 1)
|
||||||
|
for (let e = 0; e < rowElementList.length - 1; e++) {
|
||||||
|
const el = rowElementList[e]
|
||||||
|
el.metrics.width += gap
|
||||||
|
}
|
||||||
|
curRow.width = availableWidth
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return rowList
|
return rowList
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user