SimpleChainableStackUI
基于 UIStackView 的声明式 UI。
可链式
基本
var label: UILabel!
UILabel()
.text("Text")
.font(.systemFont(ofSize: 20))
.assign(to: &label)
.apply { label in
label.textColor = .darkGray
}
任何属性
class MyView : UIView {
var text: String?
}
MyView()
.set(\.text, to: "Text")
.set(\.frame, to: .zero)
可观察的
使用 @CSObservable
和 $
。
class MyViewController : UIViewController {
@CSObservable var buttonTitle: String? = "Text"
@CSObservable var buttonHidden = false
override func viewDidLoad() {
super.viewDidLoad()
UIButton()
.observableTitle($buttonTitle, for: .normal)
.observableHidden($buttonHidden)
}
func update() {
buttonTitle = "New Text"
buttonHidden.toggle()
}
}
动作
UIView()
.onTapGesture {
print("Hello")
}
UIButton()
.onTouchUpInside {
print("Hello")
}
UISwitch()
.onValueChanged { isOn in
print("\(isOn)")
}
堆叠
- UVStack 和 UIHStack
- ForIn
- 条件语句
- 视图容器
- 间距和绑定隐藏
let label: UILabel!
let container = ViewContainer {
UIVStack {
UILabel()
.text("Text")
.size(height: 28)
.assign(to: &label)
Spacer()
.bindHidden(to: label)
UIHStack(distribution: .fillEqually) {
for text in ["A", "B", "C"] {
UILabel().text(text)
}
if label.isHidden {
UILabel().text("Text")
}
}
UIButton(type: .system)
.title("Hide Label", for: .normal)
.onTouchUpInside {
label.isHidden = true //Spacer will be hidden too.
}
}
}.frame(CGRect(x: 0, y: 0, width: 240, height: 120))
要求
- iOS 10.0+
- Swift 5.4+
安装
SimpleChainableStackUI 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中即可
pod 'SimpleChainableStackUI'
作者
Orisun,[email protected]
许可
SimpleChainableStackUI 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。