Open hanleylee opened 10 months ago
Anyone can reproduce it using below code(YogaKit (for iOS) 2.0.1)
import Foundation import yoga final class YogaTestVC: UIViewController { override func viewDidLoad() { super.viewDidLoad() initView() } } // MARK: UI extension YogaTestVC { private func initView() { view.backgroundColor = .black view.configureLayout { layout in layout.isEnabled = true layout.flexDirection = .column layout.alignItems = .stretch layout.justifyContent = .center } let containerView = UIView() containerView.backgroundColor = .white containerView.configureLayout { layout in layout.isEnabled = true layout.flexDirection = .column layout.alignItems = .stretch } view.addSubview(containerView) let view1 = UIView() view1.backgroundColor = .orange view1.configureLayout { layout in layout.isEnabled = true layout.height = YGValue(value: 50, unit: .point) } containerView.addSubview(view1) let view2 = UIView() view2.backgroundColor = .green view2.configureLayout { layout in layout.isEnabled = true layout.height = 0.5 } containerView.addSubview(view2) let view3 = UIView() view3.backgroundColor = .orange view3.configureLayout { layout in layout.isEnabled = true layout.height = 50 } containerView.addSubview(view3) view.yoga.applyLayout(preservingOrigin: true) } }
The top position of view3 is 50.667 instead of 50.333, because the heights of view1 and view2 are 50, 0.667 respectively
view3
view1
view2
The top position of view3 is 50.333
After check the source code, I found here will convert view3's top from 50.5 to 50.333, while textRounding is true.
50.5
50.333
true
https://github.com/facebook/yoga/blob/7697be57a86606e6019e4a978587ffc0e37cb84b/yoga/algorithm/PixelGrid.cpp#L84-L94
I suspect this issue is similar to #901, but can't be sure
Yoga assumes every leaf node is YGNodeTypeText, which triggers ceil instead of round. This assumption is not correct when measure function is used to delegate to different layout system.
YGNodeTypeText
Report
Issues and Steps to Reproduce
Anyone can reproduce it using below code(YogaKit (for iOS) 2.0.1)
Expected Behavior
The top position of
view3
is 50.667 instead of 50.333, because the heights ofview1
andview2
are 50, 0.667 respectivelyActual Behavior
The top position of view3 is 50.333
Screenshot
Explore
After check the source code, I found here will convert
view3
's top from50.5
to50.333
, while textRounding istrue
.https://github.com/facebook/yoga/blob/7697be57a86606e6019e4a978587ffc0e37cb84b/yoga/algorithm/PixelGrid.cpp#L84-L94
Other
I suspect this issue is similar to #901, but can't be sure