SwiftUI: Как я могу ограничить смещаемую область вида при представлении модального (на самом деле не модального) вида поверх основного вида? - PullRequest
2 голосов
/ 07 февраля 2020

Я разрабатываю приложение на основе Tabview с тремя TabItems. Каждый TabItem является списком, и я мог бы показать своего рода модальное представление над этими списками. Проблема возникает, когда я не могу назвать лист как модальное представление, потому что листы почти полностью оконные. Мне нужен какой-то модальный вид снизу, поэтому я создаю представление, которое я представляю поверх списка с более высоким индексом ZIndex. Кажется, это работает, пока вы не нажмете на панели вкладок и не выберете другой TabItem, развернув «модальное» представление. Ошибка:

[TableView] Только предупреждение один раз: UITableView было приказано расположить его видимые ячейки и другое содержимое, не находясь в иерархии представления (представление таблицы или одно из ее суперпредставлений не было добавлено в окно). Это может привести к ошибкам, заставляя представления внутри табличного представления загружаться и выполнять компоновку без точной информации (например, границ табличного представления, сбора признаков, полей компоновки, вставок в безопасной области и т. Д. c), а также приведет к ненужным потерям производительности из-за дополнительные макеты проходят.

Итак, я хотел бы в качестве решения ограничить область соприкосновения «модальной» областью просмотра. ¿Есть ли способ достичь этого?

enter image description here

1 Ответ

2 голосов
/ 07 февраля 2020

Возможно, у вас есть какое-то состояние, в зависимости от которого вы представляете "модальное" представление, поэтому в зависимости от того же условия вы можете отключить его под TabView, как показано ниже

TabView {
// ... tabs content here
}.disabled(showingModal)

Обновление: Вот демонстрация подхода, который я имел в виду (протестировано с Xcode 11.3 +)

enter image description here

struct TestTabViewModal: View {
    @State private var selectedTab = 0
    @State private var modalShown = false
    var body: some View {
        ZStack {
            TabView(selection: $selectedTab) {
                VStack {
                    Button("Show Modal") { self.modalShown = true }
                        .padding(.top, 40)
                    Spacer()
                }
                .tabItem {
                    Image(systemName: "1.circle")
                }.tag(0)

                Text("2").tabItem {
                    Image(systemName: "1.circle")
                }.tag(1)
            }.disabled(modalShown)

            if modalShown {
                RoundedRectangle(cornerRadius: 10)
                    .fill(Color.yellow)
                    .frame(width: 320, height: 240)
                    .overlay(Button("CloseMe") { self.modalShown = false })
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...