Правильно отключите касание UIPageControl в TabView с помощью PageTabViewStyle - PullRequest
0 голосов
/ 06 августа 2020

Я установил (подкачку) TabView с .tabViewStyle(PageTabViewStyle(indexDisplayMode: .always)).

Я хотел бы, чтобы IndexView был просто визуальным, т.е. не реагировал на любое прикосновение.

Чтобы для этого я установил UIPageControl.appearance().isUserInteractionEnabled = false, что фактически отключает листание касанием.

Однако касания UIPageControl (выделены синим цветом, установив его backgroundColor) не передаются в List ниже : нажатие на синюю область не приведет к выделению строки в List внизу.

Есть ли способ добиться этого?

Вот мой пример кода (работает на iOS 14.0 бета 4):

struct ContentView: View {
    
    init() {
        UIPageControl.appearance().backgroundColor = UIColor(red: 0, green: 0, blue: 0.5, alpha: 0.5)
        UIPageControl.appearance().isUserInteractionEnabled = false
    }
    
    var body: some View {
        NavigationView {
            TabView {
                ForEach (0..<3, id: \.self) { page in
                    List {
                        ForEach (0..<30, id: \.self) { row in
                            NavigationLink(
                                destination: Text("Page \(page) Row \(row)"),
                                label: {
                                    Text("Page \(page) Row \(row)")
                                })
                        }
                    }
                    .tag(page)
                }
            }
            .tabViewStyle(PageTabViewStyle(indexDisplayMode: .always))
            .indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always))
            .navigationBarTitle("Title", displayMode: .inline)
            .edgesIgnoringSafeArea(.bottom)
        }
    }
}
...