将SwiftUI SegmentedControl与SF符号一起使用会产生奇怪的行为

时间:2019-07-14 04:46:32

标签: swiftui

我想在SwiftUI的SegmentedControl中使用SF符号。将此代码复制到项目中,然后观察会发生什么。没有很好的方法来解释此行为。您必须自己看看。

import SwiftUI

struct ContentView : View {
    @State private var favoriteColor = 0

    var body: some View {
        VStack {
            SegmentedControl(selection: $favoriteColor) {
                Image(systemName: "hammer.fill").tag(0)
                Image(systemName: "house.fill").tag(1)
                Image(systemName: "desktopcomputer").tag(2)
                Image(systemName: "cart.fill").tag(3)
                Image(systemName: "phone.arrow.right.fill").tag(4)
                Image(systemName: "wand.and.rays").tag(5)
                Image(systemName: "slider.horizontal.3").tag(6)
            }
            Text("Value: \(favoriteColor)")
        }
    }
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

如果有人发现此问题,请提供答案或解释。

1 个答案:

答案 0 :(得分:1)

是的,这是一个错误。在解决之前,这里有一种解决方法。您基本上将片段封装在一个单独的视图中,问题就消失了:

struct TabItem: View {
    let image: String
    let tag: Int

    var body: some View {
        Image(systemName: image).tag(tag)
    }
}

struct ContentView : View {
    @State private var favoriteColor = 0

    var body: some View {
        VStack {
            SegmentedControl(selection: $favoriteColor) {
                TabItem(image: "hammer.fill", tag: 0)
                TabItem(image: "house.fill", tag: 1)
                TabItem(image: "desktopcomputer", tag: 2)
                TabItem(image: "cart.fill", tag: 3)
                TabItem(image: "phone.arrow.right.fill", tag: 4)
                TabItem(image: "wand.and.rays", tag: 5)
                TabItem(image: "slider.horizontal.3", tag: 6)
            }
            Text("Value: \(favoriteColor)")
        }
    }
}