SSUI
SSUI 是一个 UI 包装库,99% 是纯 SwiftUI,用于进一步简化 UI 设置。该库为了易于使用而具有强烈的观点。
SSUI 的理念是抽象出你在编码级别自定义视图外观的细节。作为 SSUI 的用户,您只需要关注声明性视图的外观配置。SSUI 可以接受的配置可以注入为一个 Decoable(您可以使用 json 或甚至从远程服务器获取配置),也可以用程序的方式,由您选择。
SSUI 有两个主要功能:配置单个视图的外观和其他“复合”视图:alert,页面滑动器等。它还提供了一些常用的形状。
SSUI 支持暗黑模式,您只需要提供颜色。如果没有找到,它将使用默认的亮色模式颜色。
SSUI 使用 iOS 14 的少量功能,因此如果您将项目设置为针对 iOS 13,并且某些功能不起作用,请查看我的代码以查看我是否在进行报告和问题之前有版本检查。
如何使用
要将 SSUI 添加到您的项目,将以下内容添加到您的 Podfile 中
pod SSUI
SSUI 中实现的一些视图可能需要您提供一些配置,以便它知道如何配置该视图。如果您使用自定义加载指示器、`SSUIKeyboardDismissView`、`SSUITextField/SSUISecureField`(带有信息或清除按钮)或 `SSUIBackableTopBar`,您需要实现 `SSUICustomizer` 并将其提供给 SSUI。
class UICustomizer: SSUICustomizer {
...
}
SSUI.shared.setCustomizer(UICustomizer())
单视图的配置
为了定制单视图的外观,我们使用 SSUIViewConfig
struct MyButton {
static let primary: SSUIViewConfig = createButtonConfig(withColor: MyColor.primary)
static let secondary: SSUIViewConfig = createButtonConfig(withColor: MyColor.secondary)
static let dismissive: SSUIViewConfig = createButtonConfig(withColor: MyColor.dismissive)
static let cautious: SSUIViewConfig = createButtonConfig(withColor: MyColor.cautious)
private static func createButtonConfig(withColor color: SSUIColor, maxWidth: Bool = false) -> SSUIViewConfig {
let backgroundColor = color
let foregroundColor = SSUIColor.color(light: .white)
let corner = SSUICorners(topLeft: 20, topRight: 20, bottomRight: 20, bottomLeft: 20)
let font = SSUIFont(systemFont: .body, properties: [.bold])
let frame = SSUIFrame(expandHorizontally: maxWidth, verticalPadding: 10, horizontalPadding: 20)
return SSUIViewConfig(backgroundColor: backgroundColor, foregroundColor: foregroundColor,
corners: corner, font: font, frame: frame)
}
}
struct Buttons: View {
var body: some View {
VStack {
Button("Primary") {}.applySSUIConfig(MyButton.primary)
Button("Secondary") {}.applySSUIConfig(MyButton.secondary)
Button("Dismissive") {}.applySSUIConfig(MyButton.dismissive)
Button("Cautious") {}.applySSUIConfig(MyButton.cautious)
}
}
}
上面的代码将生产这个,你也可以随心所欲地添加渐变、阴影等。
SSUIViewConfig内部的所有配置都很直观,所以我不会过多解释。
注意: SSUIColor可以接受字符串作为输入,但字符串必须符合以下格式:[2个字符的透明度][6个字符的十六进制颜色]
复合视图
如果你认为系统默认的警告太丑或者根本不符合你的应用设计,没关系,SSUI为你提供了解决方案。警告只是SSUI提供的多个视图之一。
这些视图非常容易理解和使用,所以我会让你自己探索它们:SSUITabView
,SSUITextButton
,SSUIBackableTopBar
,SSUIWebView
在深入了解视图之前
SSUI为你提供了一个视图模型类,你可以继承该类来创建你的视图模型:SSUIViewModel
。当使用加载页面、警告或表单等复合视图时,我强烈建议你使用SSUIViewModel。
这个类提供了一些基本功能,你可以继承并使用。 注意: SwiftUI中在ObservableObject的子类中使用@Published属性存在已知错误。为了解决这个问题,我们需要在父类中更新一个虚拟的已发布属性。以下是处理方法
class YourViewModel: SSUIViewModel {
@Published var yourProperty: YourType {
didSet {
didSetAPublishedProperty()
}
}
}
为了让这个类提供的功能正常工作,你的View结构需要在调用时使用类似的方式
struct YourView: View {
@ObservedObject var viewModel = YourViewModel()
var body: some View {
Text("Hello there")
.form(isPresented: viewModel.isFormShownBinding, configs: yourFormConfigs, form: viewModel.form)
.alert(isPresented: viewModel.isAlertShownBinding, configs: yourAlertConfigs, alert: viewModel.alert)
.loading(isPresented: viewModel.isLoadingBinding, config: yourLoadingConfig)
}
}
SSUICoverView
这是一个在触发时可以在视图上添加层的视图。
您的视图 | 在您的视图之上的颜色 | 自定义视图 这就是 SSUILoadingScreen, SSUIAlerts 和 SSUIForm 构建在之上的。大多数情况下,您将使用 SSUIForm 来显示自定义视图,但我将这个视图设置为公开,这样您就可以在很少的情况下使用它。
SSUIAlert, SSUIForm 和 SSUILoadingScreen
如上所示,与 SSUIViewModel
结合使用时,显示警报或覆盖应用程序的加载指示符,只需设置视图模型的 alert
属性或 isLoading
属性即可。
警报和加载屏幕很直观,但表单是什么样的呢?
SSUIForm 允许您将任何视图作为隐藏视图显示。
警报和表单需要一个配置集(configs: yourFormConfigs
,配置的类型为 [AnyHashable: SSUIAlertConfig]
),因此您可以在应用程序中拥有许多类型的警报或表单。当您创建 SSUIAlert 或 SSUIForm 时,只需选择一个类型(AnyHashable
)和 SSUI 将使用相应的配置。
注意: 当您使用 SSUIForm 并且将其置于顶部或底部时,SSUI 将将其忽略安全区域边缘,因此您需要相应地填充视图。您可以使用以下方法获取安全区域顶部和底部的内边距:SSUI.safeAreaBottomInset
或 SSUI.safeAreaTopInset
。
SSUIKeyboardDismissView
您可以将视图包装在视图内部以在键盘上方显示按钮。点击此按钮将关闭键盘。
形状和其他功能
SSUI 提供了一些基本的可插入形状,如 SSUIArror
,SSUICross
等。
SSUIKeyboardResponder
是检测键盘显示/隐藏的好方法。可能还有一些我没有提到的,您可以自己去探索 :D