【发布时间】:2020-07-13 22:17:31
【问题描述】:
我有一个 TabView,其中一个选项卡是 NavigationView。我希望标签栏隐藏在导航目标视图中。我已经实现了这一点,但视图仅在第一次旋转后正确显示。如何让它第一次正确显示(第二张图片)?
struct ContentView: View {
var rowIndexes : [Int] = [0,1,2,3,4,5,6]
var body: some View {
TabView {
NavigationView {
List {
ForEach(self.rowIndexes, id: \.self) {i in
NavigationLink(
destination: Color(.blue)
.onAppear(perform: {
Global.tabBar!.isHidden = true
})
.onDisappear(perform: {
Global.tabBar!.isHidden = false
})
) {
Text("\(i)")
}
}
}
}.tabItem {
Image(systemName: "list.number")
Text("List View")
}
NavigationView {
Text("Options View")
}.tabItem {
Image(systemName: "wrench")
Text("Options")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct Global {
static var tabBar : UITabBar?
}
extension UITabBar {
override open func didMoveToSuperview() {
super.didMoveToSuperview()
Global.tabBar = self
print("Tab Bar moved to superview")
}
}
这是第一次单击列表中的链接后屏幕的样子(不正确,如果标签栏未隐藏,底部会出现空白):
这是将屏幕旋转为横向,然后再转回纵向后的样子(正确,蓝色视图一直延伸到底部):
有没有办法强制重绘,或模拟旋转和返回?我尝试了各种@State、@EnvironmentObect 和@ObservedObject 解决方案,但都没有。
【问题讨论】:
标签: ios swift xcode uikit swiftui