我有以下代码,但似乎无法删除 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) 会删除索引点,但这不起作用。还有其他方法可以摆脱它们吗?
我在 SwiftUI 2.0 和 iOS14 中遇到了非常奇怪的行为。
当键盘出现在屏幕上时,会自动调用其他选项卡视图的 OnAppear 方法。
但是,这很好用 Xcode 11.7
这是产生上述错误的代码。
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) 我想在每次点击选项卡时运行一个函数。
在下面的代码中(通过使用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)
我怎样才能得到这两件事:
我正在尝试在 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)
有谁知道如何做到这一点?我将不胜感激你的帮助:)
我正在尝试创建一个像苹果的一些应用程序一样的轮播。具有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 中所在的页面,TabView但PageTabViewStyle我无法找出跟踪页面索引的最佳方法?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) 看起来 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 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
我发现 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
我想在 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)