Проблема
minHeight (и maxHeight) не применяются, когда высота канваса вычисляется из содержимого — то есть при canvas.fixed: width или fixed: none. Свойство парсится, но на layout не влияет.
Как воспроизвести
repro.yaml:
template: { name: t, version: 1 }
canvas: { fixed: width, width: 576, background: "#ffffff" }
layout:
- type: text
content: "Hello receipt"
size: 20
minHeight: "800"
flexrender-cli debug-layout repro.yaml
Фактически (v0.13.0):
FlexElement: W=576,0, H=26,6 [column]
TextElement: W=576,0, H=26,6
Ожидалось: высота элемента не меньше 800, канвас соответственно выше.
Результат одинаковый с minHeight и без него. Если обернуть содержимое во flex с minHeight — то же самое. Явный height: "800" работает (H=826,6), то есть проблема именно в min/max-ограничениях.
Причина
В ColumnFlexLayoutStrategy.LayoutColumnFlex блок, где вызывается LayoutHelpers.ResolveMinMax и делается ClampSize, целиком находится под if (!isAutoHeight) (src/FlexRender.Core/Layout/ColumnFlexLayoutStrategy.cs:80), а isAutoHeight = node.Height == 0 (:31) — при canvas.fixed: width это всегда верно для корня.
LayoutHelpers.ResolveFlexBasis тоже не учитывает MinHeight: базис клэмпится только по padding.
Итого min/max по главной оси работают лишь как ограничитель при распределении свободного места в контейнере с известной высотой. По CSS min-height должен ограничивать и content-based размер.
Проблема
minHeight(иmaxHeight) не применяются, когда высота канваса вычисляется из содержимого — то есть приcanvas.fixed: widthилиfixed: none. Свойство парсится, но на layout не влияет.Как воспроизвести
repro.yaml:Фактически (v0.13.0):
Ожидалось: высота элемента не меньше 800, канвас соответственно выше.
Результат одинаковый с
minHeightи без него. Если обернуть содержимое воflexсminHeight— то же самое. Явныйheight: "800"работает (H=826,6), то есть проблема именно в min/max-ограничениях.Причина
В
ColumnFlexLayoutStrategy.LayoutColumnFlexблок, где вызываетсяLayoutHelpers.ResolveMinMaxи делаетсяClampSize, целиком находится подif (!isAutoHeight)(src/FlexRender.Core/Layout/ColumnFlexLayoutStrategy.cs:80), аisAutoHeight = node.Height == 0(:31) — приcanvas.fixed: widthэто всегда верно для корня.LayoutHelpers.ResolveFlexBasisтоже не учитываетMinHeight: базис клэмпится только по padding.Итого min/max по главной оси работают лишь как ограничитель при распределении свободного места в контейнере с известной высотой. По CSS
min-heightдолжен ограничивать и content-based размер.