0

我在这里关注 WWDC2019 的会议:

https://developer.apple.com/videos/play/wwdc2019/216/

我有以下代码用于使用 SwiftUI 创建 TabbedView :

//第 1 节 | 内容视图(我的)---------------

import SwiftUI

struct ContentView : View {
    var body: some View {
        NavigationView {
            TabbedView(selection: .constant(1)) {
                PlaceForm().tabItemLabel(Text("Tab1")).tag(1)
                FavoritesForm().tabItemLabel(Text("Tab2")).tag(2)
            }
        }

    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

//--------------------------------------- 以上产生了以下选项卡式视图:

没有图像的选项卡式视图

但是,在 WWDC2019 会议中,使用了以下代码:

//第 2 节 | ContentView(苹果的)---------------

import SwiftUI

struct ContentView : View {
    var body: some View {
        NavigationView {
            TabbedView(selection: .constant(1)) {
                PlaceForm().tabItemLabel {
                    Image(systemName: "square.and.pencil")
                    Text("Tab1")
                }
                FavoritesForm().tabItemLabel {
                    Image(systemName: "clock.fill")
                    Text("Tab2")
                }
            }
        }

    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

//---------------------------

但是,在 Xcode11Beta 上,这会导致 Xcode11Beta 引发以下编译器错误

Cannot convert value of type 'TabbedView<Int, 

TupleView<(_ModifiedContent<PlaceForm, _TraitWritingModifier<AnyView?>>, 

_ModifiedContent<FavoritesForm, _TraitWritingModifier<AnyView?>>)>>' to 

closure result type '_'

如以下屏幕截图所示在此处输入图像描述

在此处输入图像描述

//---------------------------

如果 WWDC2019 演示文稿中的信息正确,则 WWDC2019 幻灯片中演示的代码不会导致图像显示在选项卡式视图的选项卡中的原因是什么?

此外,使用 section1 中的代码,将选项卡切换到 tab2 会显示一个空白视图,如以下问题中所述:

SwiftUI TabbedView 仅显示第一个选项卡的内容

请注意 PlaceForm 和 FavoritesForm 的内容如下转载

//第 3 节 | PlaceForm---------------

import SwiftUI

struct PlaceForm : View {
    var body: some View {
        List {
            VStack {
                MapView()
                    .edgesIgnoringSafeArea(.top)
                    .frame(height: 300)

                CircleImage()
                    .offset(y: -130)
                    .padding(.bottom, -130)
                VStack {
                    VStack {
                        Text("Turtle Rock")
                            .font(.title)
                            .color(.black)
                    }
                    HStack {
                        Text("Joshua Tree National Park")
                            .font(.subheadline)
                        Spacer()
                        Text("California")
                            .font(.subheadline)
                    }
                    }
                    .padding()
            }
        }.listStyle(.grouped)

    }
}

#if DEBUG
struct PlaceForm_Previews : PreviewProvider {
    static var previews: some View {
        PlaceForm()
    }
}
#endif

//第 4 节 | 收藏表格---------------

import SwiftUI

struct FavoritesForm : View {
    var body: some View {
        List {
            VStack {
                MapView()
                    .edgesIgnoringSafeArea(.top)
                    .frame(height: 300)

                CircleImage()
                    .offset(y: -130)
                    .padding(.bottom, -130)
                VStack {
                    VStack {
                        Text("Ninja Rock")
                            .font(.title)
                            .color(.black)
                    }
                    HStack {
                        Text("Joshua Tree National Park")
                            .font(.subheadline)
                        Spacer()
                        Text("California")
                            .font(.subheadline)
                    }
                    }
                    .padding()
            }
            }.listStyle(.grouped)

    }
}

#if DEBUG
struct FavoritesForm_Previews : PreviewProvider {
    static var previews: some View {
        FavoritesForm()
    }
}
#endif
4

3 回答 3

3

此问题已通过 Xcode 11 beta 3 修复。来自iOS 和 iPadOS 13 Beta 3 发行说明

tabItemLabel( :) 修饰符 - 现在命名为tabItem ( :) - 现在接受 @ViewBuilder 闭包。(51502668)

例子:

myView()
    .tabItem {
        Image(systemName: "circle")
        Text("Tab1")
    }
于 2019-07-03T04:07:28.357 回答
0

通过用 VStack 将 tabItemLabel 中的 2 个控件包装起来,我在 Beta 2 中取得了成功:

.tabItemLabel(VStack {
                    Image(systemName: "list.bullet")
                    Text("Foo").font(.title)
            })
于 2019-06-19T03:37:23.437 回答
0

在玩了一些之后,看起来选项卡式视图还不接受系统图像。这段代码为我编译。我在 Catalina 10.15 Beta (19A487m) 上运行 Xcode 11.0 beta (11M336w)。

struct TabView : View { 
    var body: some View {
        TabbedView {
            HomeFeedUIV().tabItemLabel(Image(systemName: "house")) // doesn't work

            DatabaseHomeUIV().tabItemLabel(Image("database.unselected")) // works

            NewPostUIV().tabItemLabel(Image(systemName: "square.and.pencil")) // doesn't work
        }
    }
}

我尝试为 tabItemLabels(图像和文本)使用 VStack,但调试器说 tabItemLabels 不接受 VStack,只接受图像和文本。我还没有弄清楚如何使文本和图像出现,它似乎只接受一个或另一个。我尝试过使用括号、方括号、花括号、VStacks,但它们都不起作用。看起来它现在是一个或另一个。

于 2019-06-25T18:01:23.297 回答