iKK*_*iKK 6 landscape tabview swift
使用 Swift 5.3.2、Xcode 12.4、iOS 14.4、
我正在尝试在 SwiftUI 中制作一个简单的 Page-TabView (参见下面的代码摘录)。
当旋转到横向或返回纵向时,出现问题(参见视频):
每当我旋转 iPhone 时,TabView 都会“跳转”到随机选项卡编号。
为什么是这样 ?
我该怎么做才能使 TabView 在旋转时保持当前选项卡号?
(我使用的是iPhoneX)
新的 iOS14 TabView 的 PageControl 功能似乎存在更多问题,如此处所述。(也许旋转设备时的“随机选项卡编号”与所描述的布局问题有关)
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
TabView {
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())
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
解决方案之一是使用自定义视图修饰符设置回活动选项卡项,例如this。看起来跳转发生在旋转完成后,因此可以使用延迟计时器:
// Implement your rotation change modifier
.onChange(of: isLandscape) { _ in
if selectedTab > 0 { // Do not reset for first element
let beforeIndex = selectedTab
DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) {
selectedTab = beforeIndex
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
完整源代码在这里
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |