SwiftUI中的轮播/侧边栏列表样式

3

有两种列表样式在SwiftUI中是不活动的,并且不会产生结果。尝试使用.carousel.sidebar样式来解决问题。

struct ContentView : View {

    var body: some View {
        List {
            Text("Hello")
        }
        .listStyle(.carousel) // Or .sidebar
    }

}

这是因为beta版存在bug,还是我漏掉了什么?列表在我的iPhone上没有显示。


我更新了帖子。这个列表已经添加到我的主视图中。 - bpisano
1
@BenjaminPisano 没有必要在视图控制器中显示这个 - 我们正在使用SwiftUI。 - Matteo Pacini
@DoesData 别再谈论视图控制器了,试着阅读一篇简单的 SwiftUI 教程吧。 - Benj
3个回答

3

SidebarListStyle 仅适用于 macOS,而 CarouselListStyle 仅适用于 watchOS。

以下是在 macOS 上运行时侧边栏样式列表的样子:

展开:

Expanded

折叠:

Collapsed

这是代码 (虽然我不确定 Range 的实例或任何其他一维序列是否是这种样式的正确选择):

struct ContentView : View {
    var body: some View {
        List (0..<10) { number in
            self.view(forNumber: number)
            }
            .listStyle(.sidebar)
    }

    func view(forNumber number: Int) -> some View {
        print("number == \(number)")
        let ret = Text("#\(number)")
            .foregroundColor(.blue)
        return ret
    }
}

好的,iOS上有一个bug。我不知道正确的行为应该是什么,但我希望在iPhone上显示标准列表的两种样式都能正常显示。 - bpisano
我不认为这是iOS的bug - 这些样式根本不适用于iOS。但奇怪的是,Xcode没有报告在错误平台上使用它们。 - Russian
也许吧,但这很奇怪,因为SwiftUI没有特定于平台的UI元素。 SwiftUI实际上唯一的区别是如何处理不同平台的输入。这是我在SwiftUI中看到的第一个UI特定差异。 - bpisano

3

就像其他人指出的那样,语法正在改变。

试试这种方式:

.listStyle(CarouselListStyle())

1

你说得对。

看起来在iOS上,.carousel.sidebar两个样式都无法正常工作或未被实现。

这是我的演示代码:

struct ContentView : View {

    @State var alternateStyle = false

    var body: some View {
        var list  =
        AnyView(List(0...100) { item in
            Text("\(item)").tapAction { self.alternateStyle.toggle() }
        }
        .navigationBarTitle(Text("A List")))
        if alternateStyle {
            list = AnyView(list.listStyle(.carousel))
        } else {
            list = AnyView(list.listStyle(.default))
        }
        return list
    }

}

如果您点击,则会交换样式,您将得到一个空白列表。

SwiftUI仍处于测试版阶段,因此许多组件可能存在问题或缺失。


嗯,似乎工作正常,但我个人不太喜欢所有那些 AnyView - Benj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接