这个库是一个辅助类和扩展的集合,旨在简化 UIKit 开发。
AutoLayoutBuilder 是一个类,允许你使用简单易读的语法创建/激活约束。
let constraintsResult = AutoLayoutBuilder.activate {
subview.widthAnchor.constraint(equalTo: view.widthAnchor)
subview.heightAnchor.constraint(equalTo: view.heightAnchor)
if isOptional {
subview.widthAnchor.constraint(equalTo: view.widthAnchor)
}
if isOptional {
subview.widthAnchor.constraint(equalTo: view.widthAnchor)
} else {
subview.widthAnchor.constraint(equalTo: view.widthAnchor)
}
if isOptional {
subview.widthAnchor.constraint(equalTo: view.widthAnchor)
subview.widthAnchor.constraint(equalTo: view.widthAnchor)
} else {
subview.widthAnchor.constraint(equalTo: view.widthAnchor)
subview.widthAnchor.constraint(equalTo: view.widthAnchor)
}
isOptional ? subview.widthAnchor.constraint(equalTo: view.widthAnchor) : nil
isOptional ? nil : subview.widthAnchor.constraint(equalTo: view.widthAnchor)
if #available(iOS 13, *) {
subview.heightAnchor.constraint(equalTo: view.heightAnchor)
}
for _ in 0..<2 {
subview.heightAnchor.constraint(equalTo: view.heightAnchor)
}
[subview.heightAnchor.constraint(equalTo: view.heightAnchor)]
}
ModalPresenter 是一个类,允许你将一个视图控制器呈现为模态视图控制器。
let subject: ModalPresenter = .init(appRootViewControllerProvider: ...)
subject.lineUp(modalViewController)
Keyboard Handler 是一个类,允许你处理键盘事件并将内容滚动到可见位置。
private let keyboardHandler: KeyboardHandler = .init()
override func viewDidLoad() {
super.viewDidLoad()
keyboardHandler.enable(for: .init(view: scrollView, touchView: view, keyboardPadding: 16),
excluded: { [weak self] in
return [self?.emailTextField, self?.passwordTextField].filterNils()
})
}
TransparentTouchView 允许你创建一个对触摸事件透明的视图。最好的例子是当键盘显示时,用户想点击屏幕上的某个按钮。然后,这个视图将处理屏幕上的触摸,但不会锁定按钮上的触摸。结果是键盘隐藏并且按钮被按下。
private let touchView = TransparentTouchView()
override func viewDidLoad() {
super.viewDidLoad()
view.addAndFill(touchView)
touchView.action = { [weak self] in
self?.view.endEditing(true)
}
}
LabelLinksHandler 允许你检测 UILabel 中链接上的点击。
@IBOutlet private weak var label: UILabel!
private let linkHandler: LabelLinksHandler<URL> = .init()
override func viewDidLoad() {
super.viewDidLoad()
linkHandler.label = label
linkHandler.action = { [weak self] url in
print(url)
}
}
func configure(with viewModel: ViewModel) {
label.text = viewModel.text
linkHandler.links = viewModel.urls
}
ViewStyle 是一个类,允许你轻松地设置你需要的 UI 组件的样式。
let style = [
.backgroundColor(.blue),
.border(.magenta, 10),
.shadow(radius: 20, opacity: 0.9, offset: .init(width: 11, height: 11), color: .black),
.cornerRadius(12),
.clipsToBounds(false),
.tintColor(.white)
]
style.apply(to: viewOne)
style.apply(to: viewTwo)
style.apply(to: viewThree)