#ios #swift #swiftui
Вопрос:
Я пытаюсь создать простой интерфейс с 5 вкладками для интерфейса iPhone в SwiftUI, и по какой-то причине он продолжает вставлять представление, предназначенное для моей вкладки, в панель вкладок. До сих пор я пытался встроить кнопку в горизонтальный стек и представление навигации, но ни то, ни другое не сработало:
Но вот как это выглядит, когда я пытаюсь добавить кнопку в представление
Вот дополнительный элемент вкладки
Это мое представление о содержании:
import SwiftUI
struct ContentView: View {
var body: some View {
TabView {
Browse()
.tabItem {
Image(systemName: "photo")
Text("Browse")
}
Text("Another Tab")
.tabItem {
Image(systemName: "bell")
Text("Notifications")
}
Text("The Last Tab")
.tabItem {
Image(systemName: "person")
Text(Username)
}
Text("Another Tab")
.tabItem {
Image(systemName: "magnifyingglass")
Text("Search")
}
Text("Another Tab")
.tabItem {
Image(systemName: "gearshape")
Text("Settings")
}
}
.font(.headline)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
А вот Обзор():
import SwiftUI
struct Browse: View {
var body: some View {
Button(action: /*@START_MENU_TOKEN@*//*@PLACEHOLDER=Action@*/{}/*@END_MENU_TOKEN@*/) {
Label("Lightning", systemImage: "plus.circle.fill")
.labelStyle(IconOnlyLabelStyle())
}
.navigationTitle(/*@START_MENU_TOKEN@*/"Title"/*@END_MENU_TOKEN@*/)
VStack {
ScrollView {
/*@START_MENU_TOKEN@*//*@PLACEHOLDER=Content@*/Text("Placeholder")/*@END_MENU_TOKEN@*/
}
}
}
}
struct Browse_Previews: PreviewProvider {
static var previews: some View {
Browse()
}
}
Ответ №1:
Проблема возникает из-за компоновки вашего Browse
представления, похоже, что движок SwiftUI синтезирует/выводит два представления вместо одного. Чтобы решить эту проблему, дайте вашему Browse
представлению родительское представление контейнера, такое как a VStack
, и оно будет исправлено.
struct Browse: View {
var body: some View {
VStack {
Button(action: /*@START_MENU_TOKEN@*//*@PLACEHOLDER=Action@*/{}/*@END_MENU_TOKEN@*/) {
Label("Lightning", systemImage: "plus.circle.fill")
.labelStyle(IconOnlyLabelStyle())
}
.navigationTitle(/*@START_MENU_TOKEN@*/"Title"/*@END_MENU_TOKEN@*/)
VStack {
ScrollView {
/*@START_MENU_TOKEN@*//*@PLACEHOLDER=Content@*/Text("Placeholder")/*@END_MENU_TOKEN@*/
}
}
}
}
}