swift - 带有 PageTabViewStyle 的 TabView 无法正确旋转到横向并返回
问题描述
使用 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)
}
}
}
解决方案
推荐阅读
- unity3d - Unity - Quaternion.Lerp - 轮子旋转
- c++ - 为什么调用notify后等待线程没有唤醒?
- python - 获取运行云函数的运行时服务帐户
- ethereum - 使用枚举时,Solidity 委托调用失败并显示“函数选择器未被识别”
- reactjs - 如何在 reactjs 中从 Phpmyadmin 获取选项
- spring - 是否允许在 Hibernate Interceptor 中更改实体的关系状态?
- java - 在自定义 Android 库中包含 OpenCV,但在尝试加载示例应用程序时出错:找不到属性 camera_id 和属性 show_fps
- git - 为开发分支上的每个提交触发 Jenkins 构建
- sql - 尝试在数据集表的查询字段中插入带有中文列的选择语句,中文字段显示为?
- kubernetes - QoS Guaranteed 的 pod 可以被更高优先级的 pod 驱逐吗?