SwiftUI продолжает добавлять дополнительную кнопку, несмотря на то, что не вызывает .tabitem на панели вкладок при вставке кнопки в другое представление

#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@*/
                }
                
            }
        }
        
    }
}