UIHelper

这个库是一个辅助类和扩展的集合,旨在简化 UIKit 开发。

AutoLayoutBuilder

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

ModalPresenter 是一个类,允许你将一个视图控制器呈现为模态视图控制器。

let subject: ModalPresenter = .init(appRootViewControllerProvider: ...)
subject.lineUp(modalViewController)

KeyboardHandler

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

TransparentTouchView 允许你创建一个对触摸事件透明的视图。最好的例子是当键盘显示时,用户想点击屏幕上的某个按钮。然后,这个视图将处理屏幕上的触摸,但不会锁定按钮上的触摸。结果是键盘隐藏并且按钮被按下。

private let touchView = TransparentTouchView()

override func viewDidLoad() {
    super.viewDidLoad()
    view.addAndFill(touchView)
    touchView.action = { [weak self] in
        self?.view.endEditing(true)
    }
}

LabelLinksHandler

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

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)