A tool for StackView in UIKit.
- iOS 11.0+
- Xcode 12.5+
HStackView use-case:
let label = UILabel()
let button = UIButton()
let simpleView = UIView()
let hstack = HStackView {
label
button
simpleView
}
VStackView use-case:
let label = UILabel()
let button = UIButton()
let simpleView = UIView()
let vstack = VStackView {
label
button
simpleView
}
Nested use-case:
let refresh = Bool.random()
let refreshAnother = Bool.random()
let idx = Int.random(in: 1 ... 12)
HStackView {
VStackView {
UILabel()
UIButton()
}
if refresh {
VStackView {
UIImageView()
UIView()
}
}
if refreshAnother {
VStackView {
UIImageView()
UIView()
}
} else {
UIView()
}
UIView().withSubViews {
HStackView {
UILabel()
UIButton()
}
}
}
ps: every control flow will be treated as a block, give the simplest VStack for example:
buildExpression(_:)
-> UILabelbuildExpression(_:)
-> UIButtonbuildBlock(_:)
-> VStackViewbuildExpression(_:)
-> VStackView
As the example image above, the implement code:
private lazy var registerActionStack = VStackView(spacing: minorSpacing, alignment: .fill) {
registerButton
UIView.spacer()
loginButton
}
private lazy var registerPolicyStack = HStackView(spacing: mediumSpacing) {
UIView.spacer()
policyCircleButton
tipLabel
policyInfoButton
UIView.spacer()
}
private lazy var contentStack = VStackView(spacing: mainMargin, alignment: .center) {
sloganImageView
loginLogoImageView
registerActionStack
UIView.spacer()
registerPolicyStack
}
and the layout code:
view.withSubViews {
contentStack
}
contentStack.snp.makeConstraints {
$0.top.equalTo(view.safeAreaLayoutGuide.snp.top).offset(topPadding)
$0.leading.trailing.equalToSuperview().inset(horizontalPadding)
$0.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
}
registerButton.snp.makeConstraints {
$0.width.equalTo(view).inset(horizontalPadding)
}
- File > Swift Packages > Add Package Dependency
- Add
https://github.com/foxsin10/UStack.git
- Select "Up to Next Major" with "2.0.0"
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '11.0'
use_frameworks!
target 'MyApp' do
pod 'UStack', '~> 2.3.0'
end
UStack is released under the MIT license. See LICENSE for details.