标签: swiftui-tabview

如何在 SwiftUI 中使用 PageTabViewStyle 消除 TabView 上的索引点?

我有以下代码,但似乎无法删除 TabView 底部的点。

struct ContentView: View {
    @Environment(\.managedObjectContext) private var viewContext
    
    @State var users = ["Janice", "Emily", "Candice", "London", "Julia"]

    var body: some View {
        TabView {
            ForEach(users, id: \.self) { user  in
                UserCard(user: user)
            }
        }
        .tabViewStyle(PageTabViewStyle())
        .indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .never))
        .background(Color(.systemGroupedBackground))
    }
}

struct UserCard: View {
    
    let user: String
    
    var body: some View {
        Color.white
            .padding(30)
    }
}
Run Code Online (Sandbox Code Playgroud)

我本以为 PageIndexViewStyle(backgroundDisplayMode: .never) 会删除索引点,但这不起作用。还有其他方法可以摆脱它们吗?

ios swiftui swiftui-tabview pagetabviewstyle

25
推荐指数
2
解决办法
8182
查看次数

当键盘出现在 SwiftUI 中时 OnAppear 意外调用

我在 SwiftUI 2.0 和 iOS14 中遇到了非常奇怪的行为。

当键盘出现在屏幕上时,会自动调用其他选项卡视图的 OnAppear 方法。

但是,这很好用 Xcode 11.7

这是行动中的问题。 TabView 中的 TextField

这是产生上述错误的代码。

struct ContentView: View {
    var body: some View {
        TabView {
            DemoView(screenName: "Home")
                .tabItem {
                    Image.init(systemName: "star.fill")
                    Text("Home")
                }
            DemoView(screenName: "Result")
                .tabItem {
                    Image.init(systemName: "star.fill")
                    Text("Result")
                }
            DemoView(screenName: "More")
                .tabItem {
                    Image.init(systemName: "star.fill")
                    Text("More")
                }
        }
    }
}

struct DemoView:View {
    
    @State var text:String = ""
    var screenName:String
    var body: some View {
        VStack{
            Text(screenName)
                .font(.title)
            
            TextField("Buggy Keyboard Issue", text: $text)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                
            Text("Issue : When keyboard …
Run Code Online (Sandbox Code Playgroud)

keyboard textfield tabview swiftui swiftui-tabview

24
推荐指数
1
解决办法
1102
查看次数

SwiftUI TabView:如何检测选项卡上的点击?

我想在每次点击选项卡时运行一个函数。

在下面的代码中(通过使用onTapGesture),当我点击新选项卡时,myFunction会被调用,但选项卡视图不会更改。

struct DetailView: View {
    var model: MyModel
    @State var selectedTab = 1
    
    var body: some View {
        TabView(selection: $selectedTab) {
            Text("Graphs").tabItem{Text("Graphs")}
               .tag(1)
            Text("Days").tabItem{Text("Days")}
               .tag(2)
            Text("Summary").tabItem{Text("Summary")}
               .tag(3)
        }
        .onTapGesture {
            model.myFunction(item: selectedTab)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这两件事:

  • tabview正常显示
  • 我的函数被调用

tabview swift swiftui swiftui-tabview swiftui-ontapgesture

16
推荐指数
2
解决办法
9194
查看次数

在 SwiftUI 的 TabView 上方添加阴影

我正在尝试在 SwiftUI 中实现 TabView,它与屏幕背景具有相同的颜色,但上面还有一个阴影,如下图所示: 在此输入图像描述

到目前为止我已经能够正确显示颜色,但我不知道如何添加阴影。这是我的代码:

struct ContentView: View {
    
    init() {
        let appearance = UITabBarAppearance()
        appearance.configureWithTransparentBackground()

        UITabBar.appearance().standardAppearance = appearance
    }
    
    var body: some View {
        TabView {
            Text("First View")
                .tabItem {
                    Image(systemName: "square.and.arrow.down")
                    Text("First")
                }
            Text("Second View")
                .tabItem {
                    Image(systemName: "square.and.arrow.up")
                    Text("Second")
                }
        }
    
    }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?我将不胜感激你的帮助:)

shadow swift swiftui swiftui-tabview

11
推荐指数
1
解决办法
4032
查看次数

如何使用TabView或ScrollView进行轮播?

我正在尝试创建一个像苹果的一些应用程序一样的轮播。具有TabView分页样式,但它不会“查看”上一个和下一个元素。不会ScrollView(.horizontal)折断。我希望将这两种行为结合起来,而无需重写客户视图。这两种观点中的任何一种都可能发生这样的事情吗:

在此输入图像描述

这就是我正在尝试的:

ScrollView(.horizontal, showsIndicators: false) {
    HStack(alignment: .center, spacing: 0) {
        GroupBox(label: Text("This is the title 1")) {
            Label("Some item 1", systemImage: "checkmark.circle.fill")
            Label("Some item 2", systemImage: "checkmark.circle.fill")
            Label("Some item 3", systemImage: "checkmark.circle.fill")
            Label("Some item 4", systemImage: "checkmark.circle.fill")
        }
        .padding()
        GroupBox(label: Text("This is the title 2")) {
            Label("Some item 1", systemImage: "checkmark.circle.fill")
            Label("Some item 2", systemImage: "checkmark.circle.fill")
            Label("Some item 3", systemImage: "checkmark.circle.fill")
            Label("Some item 4", systemImage: "checkmark.circle.fill")
        }
        .padding()
        GroupBox(label: Text("This is the title 3")) { …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-scrollview swiftui-tabview

10
推荐指数
0
解决办法
1477
查看次数

SwiftUI 如何跟踪 PageTabViewStyle 中的页面索引?

我试图跟踪用户在 SwiftUI 中所在的页面,TabViewPageTabViewStyle我无法找出跟踪页面索引的最佳方法?using.onAppear效果不佳,因为它会被多次调用,并且即使不在屏幕上,页面 2 和 3 也会被调用。

@State var pageIndex = 0

    var body: some View {
    VStack {
        Text("current page = \(0) ")
        TabView {
            Text("First")
                .onAppear {
                    pageIndex = 0
                }
            Text("Second")
            .onAppear {
                    pageIndex = 1
                }
            Text("Third")
            .onAppear {
                    pageIndex = 2
                }
        }
         .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-tabview

10
推荐指数
1
解决办法
6798
查看次数

iOS 15 中的导航 + Tabview + Sheet 损坏

看起来 Navigation + TabView + Sheet 在 iOS 15 中被破坏了。

当我这样做时:ContentView -> DetailView -> Bottom Sheet

当底部工作表出现时,Detail视图会自动从堆栈中弹出: https://www.youtube.com/watch? v=gguLptAx0l4

我希望Detail即使底部工作表出现,视图也会保留在那里。有谁知道为什么会发生这种情况以及如何解决它?

这是我的示例代码:

import Combine
import SwiftUI
import RealmSwift

struct ContentView: View {

    var body: some View {
        NavigationView {
            TabView {
                TabItemView(num: 1)
                    .tabItem {
                        Text("One")
                    }
                TabItemView(num: 2)
                    .tabItem {
                        Text("Two")
                    }
            }
        }
    }
}

struct TabItemView: View {

    private let num: Int

    init(num: Int) {
        self.num = num
    }

    var body: some View { …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-tabview swiftui-navigationview ios15

10
推荐指数
1
解决办法
1884
查看次数

TabView 中的 SwiftUI 导航标题

由于本问题SwiftUI TabView 亮度视图垂直位置中概述的答案中概述的原因,我的应用程序的菜单结构是NavigationView-> TabView-> 具有不同导航标题的子视图。

问题是为.navigationTitle整个 TabView 提供一个导航标题,而不是为每个子视图提供一个导航标题。如何拥有多个导航标题TabView,每个子视图一个?

struct ContentView: View {
    var body: some View {
        NavigationView {
            TabView {
                Text("Hello")
                    .navigationTitle("Title One")
                    .tabItem {
                        Image(systemName: "square.stack")
                }
                Text("Hello Again")
                    .navigationTitle("Title Two")
                    .tabItem {
                        Image(systemName: "checkmark.square")
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink swiftui-tabview swiftui-navigationview

10
推荐指数
1
解决办法
6925
查看次数

SwiftUI:NavigationLink 在 WatchOS 8.1RC 的 Tabview 中立即弹出

我发现 watchOS 8.1RC 中存在从 TabView 触发的 NavigationLink 的回归。马上就被驳回了。

它在 watchOS 8.0 或模拟器 (watchOS 8.0) 中运行。你知道解决方法吗?谢谢

示例代码:

import SwiftUI

@main
struct TestNavigationApp: App {
    var body: some Scene {
        WindowGroup {
            NavigationView {
                ContentView()
            }
        }
    }
}

struct ContentView: View {
    var body: some View {
        List {
            NavigationLink(destination: ContentView1()) {
                Text("To TabView")
            }
        }
        
    }
}

struct ContentView1: View {
    var body: some View {
        TabView {
            NavigationView {
                NavigationLink(destination: ContentView2()) {
                    Text("To ContentView2")
                }
            }
            VStack {
                Text("Screen2") …
Run Code Online (Sandbox Code Playgroud)

apple-watch swiftui swiftui-navigationlink swiftui-tabview watchos-8

10
推荐指数
1
解决办法
971
查看次数

滑动时 SwiftUI onChange() 事件在 TabView 上不起作用

我想在 TabView 的活动选项卡更改时更改文本的值。我尝试使用onChange(of: activeTab, perform: {})更改存储文本的状态变量的值,但似乎onChange()从未调用过给定的闭包。

TabView(selection: $activeTab) {
  ForEach(exampleData) {dayMenu in
    DayMenuView(dayMenu: dayMenu)
      .padding([.leading, .bottom, .trailing])
  }
}
.onChange(of: activeTab, perform: { index in
  print(activeTab)
  withAnimation {
    activeDate = dates[1]
  }
})
Run Code Online (Sandbox Code Playgroud)

文本视图

Text(activeDate)
Run Code Online (Sandbox Code Playgroud)

状态变量

let dates = ["Montag", "Dienstag"]
    
@State private var activeTab: Int = 0
@State private var activeDate = "Montag"

Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-tabview

9
推荐指数
1
解决办法
7711
查看次数