Swiftui macOS和iOS的不同列表样式
我正在为SwiftUI上的macOS和iOS编写多平台应用程序。在iOS上,我需要以DefaultListStyle()的形式查看列表,在macOS上,我需要以SidebarListStyle()的形式查看列表。我试过:Swiftui macOS和iOS的不同列表样式,swiftui,swiftui-list,Swiftui,Swiftui List,我正在为SwiftUI上的macOS和iOS编写多平台应用程序。在iOS上,我需要以DefaultListStyle()的形式查看列表,在macOS上,我需要以SidebarListStyle()的形式查看列表。我试过: #if os(iOS) .listStyle(DefaultListStyle()) #else .listStyle(SidebarListStyle()) #endif 以及: 有几种方法可以做到这一点,不幸的是,它们都有点笨拙。以下是我在实践中使用的3种解决方案
#if os(iOS)
.listStyle(DefaultListStyle())
#else
.listStyle(SidebarListStyle())
#endif
以及:
有几种方法可以做到这一点,不幸的是,它们都有点笨拙。以下是我在实践中使用的3种解决方案 如果在
正文中有else
最直接的方法是为两种平台复制body
中的所有内容:
struct ContentView: View {
var body: some View {
#if os(iOS)
List {
...
}
.listStyle(DefaultListStyle())
#else
List {
...
}
.listStyle(SidebarListStyle())
#endif
}
}
显然,这会导致大量代码重复,但您可以重新组织代码以将其最小化
类型别名
对于您尝试执行的操作,我建议在代码中的某个位置定义typealias
:
#if os(iOS)
typealias MyListStyle = DefaultListStyle
#else
typealias MyListStyle = SidebarListStyle
#endif
…然后您可以在任何需要的地方使用它:
.listStyle(MyListStyle())
视图修改器
如果你遇到很多这样的问题(如果你在做跨平台的SWIFTUI,你会),那么你应该考虑创建一个视图修饰符,让你执行任意代码,包括<代码> {如果OS-()/代码>检查:
extension View {
func modify<T: View>(@ViewBuilder _ modifier: (Self) -> T) -> some View {
return modifier(self)
}
}
struct ContentView: View {
var body: some View {
List {
...
}
.modify {
#if os(iOS) {
$0.listStyle(DefaultListStyle())
#else
$0.listStyle(SidebarListStyle())
#endif
}
}
}
扩展视图{
func modify(@ViewBuilder\umodifier:(Self)->T)->一些视图{
返回修饰符(自身)
}
}
结构ContentView:View{
var body:一些观点{
名单{
...
}
.修改{
#如果操作系统(iOS){
$0.listStyle(DefaultListStyle())
#否则
$0.listStyle(SidebarListStyle())
#恩迪夫
}
}
}
如果你想了解更多,我写了一篇关于最后一种方法的文章。有几种方法可以做到这一点,不幸的是它们都有点笨拙。下面是我在实践中使用的3种解决方案 如果在
正文中有else
最直接的方法是为两种平台复制body
中的所有内容:
struct ContentView: View {
var body: some View {
#if os(iOS)
List {
...
}
.listStyle(DefaultListStyle())
#else
List {
...
}
.listStyle(SidebarListStyle())
#endif
}
}
显然,这会导致大量代码重复,但您可以重新组织代码以将其最小化
类型别名
对于您尝试执行的操作,我建议在代码中的某个位置定义typealias
:
#if os(iOS)
typealias MyListStyle = DefaultListStyle
#else
typealias MyListStyle = SidebarListStyle
#endif
…然后您可以在任何需要的地方使用它:
.listStyle(MyListStyle())
视图修改器
如果你遇到很多这样的问题(如果你在做跨平台的SWIFTUI,你会),那么你应该考虑创建一个视图修饰符,让你执行任意代码,包括<代码> {如果OS-()/代码>检查:
extension View {
func modify<T: View>(@ViewBuilder _ modifier: (Self) -> T) -> some View {
return modifier(self)
}
}
struct ContentView: View {
var body: some View {
List {
...
}
.modify {
#if os(iOS) {
$0.listStyle(DefaultListStyle())
#else
$0.listStyle(SidebarListStyle())
#endif
}
}
}
扩展视图{
func modify(@ViewBuilder\umodifier:(Self)->T)->一些视图{
返回修饰符(自身)
}
}
结构ContentView:View{
var body:一些观点{
名单{
...
}
.修改{
#如果操作系统(iOS){
$0.listStyle(DefaultListStyle())
#否则
$0.listStyle(SidebarListStyle())
#恩迪夫
}
}
}
如果你想了解更多,我写了一篇关于最后一种方法的文章。这回答了你的问题吗?这回答了你的问题吗?