Swift wrapper of facebook/yoga, a cross-platform CSS Flexbox layout engine that is lightweight, runs asynchronously, and is far simpler than AutoLayout.
If you are new to CSS Flexbox, visit following links and have fun :)
- CSS Flexible Box Layout Module Level 1
- CSS Flexible Box Layout - CSS | MDN
- A Complete Guide to Flexbox | CSS-Tricks
let node = Node(
size: CGSize(width: 300, height: 100),
children: [
Node(size: CGSize(width: 20, height: 20)),
Node(size: CGSize(width: 40, height: 80)),
Node(size: CGSize(width: 60, height: 40)),
],
flexDirection: .row,
justifyContent: ... // .flexStart, .center, .flexEnd, .spaceBetween, .spaceAround
)
let view = ... // prepare view hierarchy
DispatchQueue.global.async {
let layout = node.layout()
DispatchQueue.main.async {
layout.apply(view)
}
}
This will result:
Please see FlexboxPlayground for more examples.
The original idea is from joshaber/SwiftBox.