iOS13设备TabItem切换功能异常,无法正确加载对应UI界面
问题根因
该问题是iOS 13系统SwiftUI的已知兼容性缺陷:TabView加载UIViewControllerRepresentable包装的UIKit视图控制器时,不会自动为其设置匹配父容器的布局尺寸,导致视图默认尺寸为0,视觉上表现为切换标签后无内容显示,该问题在iOS 14及以上系统已被官方修复。
修复方案
只需为每个DetestVXViewController实例添加填充父容器的frame修饰符即可,修改后代码如下:
struct ContentView: View { private enum Tab: Hashable { case one case two } @State private var selectedIndex = Tab.one var body: some View { TabView(selection: $selectedIndex) { DetestVXViewController(bgColor: .red) .frame(maxWidth: .infinity, maxHeight: .infinity) .tabItem { Text("123") }.tag(Tab.one) DetestVXViewController(bgColor: .green) .frame(maxWidth: .infinity, maxHeight: .infinity) .tabItem { Text("321") }.tag(Tab.two) } } }
备选方案
如果上述修改仍无法解决问题,可完全使用UIKit的UITabBarController实现标签栏逻辑,再通过UIViewControllerRepresentable包装后放入SwiftUI视图树中,该方式对iOS 13的兼容性更好。
内容的提问来源于stack exchange,提问作者Bhupesh Kumar
相关产品推荐
相关产品推荐

