fix(ios): honor fixed-height boxes - #104
Conversation
Bead: clarity-590
GenericJam
commented
Aug 30, 2026
Adversarially reviewed and device-verified. Approve. Device matrix on a pool sim (element_frames, points): height-only 120 → {402.0 × 120.0} exact with full parent width per contract — bug fixed; width-only, both-dims, and neither all unchanged; weighted box with fixed height → weight wins (269 = 538/2), matching Android's Compose semantics where weight's exact constraints coerce height(). Paint verified by pixel sampling: the height-only box's full 402×120 frame samples the exact requested color at dominant_share 1.0 (434,160 px @3x) — background/border/tap cover the expanded frame because the new .frame sits before padding/background/gestures in the chain, same ordering as Android. Gates on the PR+master merge (clean merge-tree): 1281 tests / 0 failures, format, credo --strict, warnings-as-errors. Non-blocking: (1) no CHANGELOG entry — I'll include one in the release cut; (2) the new source-contract test asserts an exact 5-line whitespace-sensitive block — the #98 precedent is token-level =~ assertions plus an ordering check, worth loosening next touch; (3) precedence corner: height + fill_height together now lets height win on iOS while Android's fillMaxHeight().height(h) lets fill win — iOS is now internally consistent, but the contradictory-props corner diverges cross-platform; deserves a comment or docs note. Also discovered during review (filing separately): iOS Column/Row still ignore fixed width/height entirely — the same bug class this fixes for Box. Merging. |
Uh oh!
There was an error while loading. Please reload this page.
Summary
fixedHeightwhen a MobBox has no fixed widthVerification
mix formatmix compile --warnings-as-errorsmix credo --strictmix test(1,259 passed, 38 excluded)Mob.Test.frame/2: height-120 box{0.0, 62.0, 402.0, 120.0}; following height-40 reference{0.0, 182.0, 402.0, 40.0}