首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在iPad纵向模式下拆分视图会导致在启动时显示无用的视图

在iPad纵向模式下拆分视图会导致在启动时显示无用的视图
EN

Stack Overflow用户
提问于 2021-10-25 23:24:26
回答 1查看 116关注 0票数 0

使用以下代码,在纵向模式下为iPads启动应用程序时会显示Useless View。按一下Back (后退)按钮,细节视图显示"Link 1 destination“(链接1目的地)。只有在第二次按下时才会显示侧边栏。这不是我们想要的任何应用程序的行为。

如果我们从代码中删除无用的视图,我们在启动时会得到一个空白屏幕,我们仍然需要按一次后退按钮才能到达链接1的目的地,两次才能到达侧边栏。此外,侧边栏中列表的样式似乎不太可取。

我们想要的行为是在应用程序启动时显示Link 1 destination,然后单击Back按钮将我们带到侧边栏。在SwiftUI 3中,这是我们期望的任何应用程序的完全标准行为吗?

代码语言:javascript
代码运行次数:0
运行
复制
struct ContentView: View {
    @State var selection: Int? = 0
    var body: some View {
        NavigationView {
            List {
                NavigationLink("Link 1", tag: 0, selection: $selection) {
                    Text("Link 1 destination")
                }
                NavigationLink("Link 2", tag: 1, selection: $selection) {
                    Text("Link 2 destination")
                }
            }
            
            //If we delete the Useless View, we still have to press Back twice
            //to get to the sidebar nav.
            Text("Useless View")
                .padding()
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-26 17:01:02

@Yrb comment pointed to right track,对底层UIKit UISplitViewController进行修补,以强制显示主列。然而,在细节中有一些沉重的视图,在较慢的iPads上出现和消失的主列有一些闪烁。所以我用Introspect library做了这个

代码语言:javascript
代码运行次数:0
运行
复制
struct ContentView: View {
    @State var selection: Int? = 0
   
    var body: some View {
        NavigationView {
            List {
                NavigationLink("Link 1", tag: 0, selection: $selection) {
                    Text("Link 1 destination")
                }
                NavigationLink("Link 2", tag: 1, selection: $selection) {
                    Text("Link 2 destination")
                }
            }
            //In my case I never have a 'Nothing Selected' view, you could replace EmptyView() here
            //with a real view if needed.
            EmptyView()
        }
        .introspectSplitViewController { svc in
            if isPortrait { //If it's done in landscape, the primary will be incorrectly disappeared
                svc.show(.primary)
                svc.hide(.primary)
            }
        }
    }
}

这正如我们所预期的那样呈现,没有闪烁或其他伪像。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69715797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档