Совместимость между большой панелью навигации заголовка SwiftUI и UIViewControllerRepresentable UITableViewController - PullRequest
0 голосов
/ 11 июля 2020

Чтобы реализовать свайп вправо в списке SwiftUI, я пытаюсь сделать UIViewControllerRepresentable UITableViewController. Однако он несовместим с панелью навигации, когда displayMode имеет значение .large.

Я думаю, когда прокрутка перемещается, она должна

  1. Изменить размер панели навигации.
  2. Отрегулируйте рамку Scrollview или List.

# 2 не работает с моим табличным представлением, поэтому нужно что-то делать. И мне нужна ваша помощь.

[Изображения]

введите описание изображения здесь

  1. Первый рендеринг работает нормально.
  2. После прокрутки появляется дополнительное пространство над табличным представлением
  3. После прокрутки вверх при нажатии в верхней части дисплея позиция нарушена.
  4. Иерархия представлений после прокрутки (исправлено после первого рендеринга)

[Код] для воспроизведения (после создания проекта swiftui из xcode, замените содержимое ContentView.swift приведенным ниже кодом.)

import SwiftUI

final class TableViewWrapper: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> UITableViewController {
        let viewController = UITableViewController()
        viewController.tableView.delegate = context.coordinator
        viewController.tableView.dataSource = context.coordinator

        return viewController
    }

    func updateUIViewController(_ uiViewController: UITableViewController, context: Context) {
        uiViewController.tableView.reloadData()
    }

    func makeCoordinator() -> Coordinator {
        Coordinator()
    }

    class Coordinator: NSObject, UITableViewDataSource, UITableViewDelegate {
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 100
        }

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = UITableViewCell(style: .subtitle, reuseIdentifier: nil)
            cell.backgroundColor = .black
            cell.textLabel!.textColor = .white
            cell.textLabel!.text = "Test"

            return cell
        }
    }
}

struct ContentView: View {
    var body: some View {
        NavigationView {
            TableViewWrapper()
                .navigationBarTitle("Nav title", displayMode: .large)
        }
    }
}

1 Ответ

0 голосов
/ 12 июля 2020

У меня есть решение.

    TableViewWrapper()
        .edgesIgnoringSafeArea(.top)
...