带有 PageTabViewStyle 的 TabView 无法正确旋转到横向和后退

问题描述

使用 Swift5.3.2、iOS14.4、Xcode12.4,

我正在尝试在 SwiftUI 中将 TabView 旋转为横向并返回纵向。

我将 TabView 作为 PageTabViewStyle 运行,以使其看起来像一个 PageViewController。

一切正常,除了旋转到横向和纵向。

每当我旋转时,Tab 都会跳到一个随机数!

这是我的代码

TabView(selection: self.$selectedTab) {    
    Text("1")
        .frame(maxWidth: .infinity,maxHeight: .infinity)
        .background(Color.pink)
    Text("2")
        .frame(maxWidth: .infinity,maxHeight: .infinity)
        .background(Color.yellow)
    Text("3")
        .frame(maxWidth: .infinity,maxHeight: .infinity)
        .background(Color.green)
    Text("4")
        .frame(maxWidth: .infinity,maxHeight: .infinity)
        .background(Color.blue)
}
.tabViewStyle(PageTabViewStyle())
.onRotate { _ in
    print(selectedTab)
}

为了更好地观察我们最终看到的选项卡,我编写了这个视图扩展和自定义修饰符。但是,不需要扩展名和自定义修饰符的情况下已经发生了不需要的选项卡跳转

知道该怎么做吗??

extension View {
   
    func onRotate(perform action: @escaping (UIDeviceOrientation) -> Void) -> some View {
        self.modifier(DeviceRotationViewModifier(action: action))
    }
}
struct DeviceRotationViewModifier: ViewModifier {
   
    let action: (UIDeviceOrientation) -> Void
    func body(content: Content) -> some View {
        content
        .onAppear()
        .onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
          action(UIDevice.current.orientation)
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...