使用 Swift5.3.2、iOS14.4、Xcode12.4、
我正在尝试在 SwiftUI 中将 TabView 旋转为横向并返回纵向。
我将 TabView 作为 PageTabViewStyle 运行,以使其看起来像 PageViewController。
一切正常,除了旋转到横向和回到纵向。
每当我旋转时,选项卡都会跳到一个随机数!
这是我的代码:
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)
}
}
}