swiftui - iOS 和 WatchOS 上的不同 .listStyle() 在可重用组件中?
问题描述
我很想在 iOS 和 WatchOS 之间重用列表布局,但InsetGroupedListStyle()
在 WatchOS 上不可用。
什么是创建一个有条件地返回InsetGroupedListStyle()
iOS 的助手的好方法,例如。PlainListStyle()
在 WatchOS 上?
我试过这个,但得到一个我无法返回的错误ListStyle
(这可能是由于 SwiftUI 需要在编译时知道特定类型)。
查看.swift
List {
// ...
}
.listStyle(MyInsetGroupedListStyle())
Helpers.swift
public func MyInsetGroupedListStyle() -> ListStyle {
#if os(watchOS)
return PlainListStyle()
#else
return InsetGroupedListStyle()
#endif
}
另一种方法可以是指定 listStyle 内联,但 swift 不支持表达式中的条件编译:
查看.swift
List {
// ...
}
.listStyle(#if os(watchOS) PlainListStyle() #else InsetGroupedListStyle() #endif)
解决方案
您可以使用 View 上的扩展来实现您想要的。这使您可以listStyle
为所需的操作系统添加带有所需参数的修饰符。
extension View {
public func customListStyle() -> some View {
#if os(watchOS)
return self.listStyle(PlainListStyle())
#else
return self.listStyle(InsetGroupedListStyle())
#endif
}
}
然后你会像这样使用它:
List {
// items in list go here
}
.customListStyle()
推荐阅读
- javascript - 我的 Ajax 脚本在提交后没有隐藏 Bootstrap 模式
- python - 根据可能的最短行驶距离将一组分成两部分
- c# - 如何在 C# 中将值的 json 数组转换为嵌套的 json 对象
- java - 写入文件直到限制大小为 1474560(软盘)
- racket - 是否可以在不重新安装或使用较旧的编译器/解释器版本的情况下降级 DrRacket?
- java - 回收站视图上方的 CardView,滚动为 One
- python - Pycharm 不导入包,而 iPython 可以
- c++ - 检查数组是否“正确”(C++)
- javascript - 点击后更新警报和计数器
- angularjs - 未填充使用 ng-options 选择的值