程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了SwiftUI NavigationView with ScrollView with PageTabViewStyle()大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决SwiftUI NavigationView with ScrollView with PageTabViewStyle()?

开发过程中遇到SwiftUI NavigationView with ScrollView with PageTabViewStyle()的问题如何解决?下面主要结合日常开发的经验,给出你关于SwiftUI NavigationView with ScrollView with PageTabViewStyle()的解决方法建议,希望对你解决SwiftUI NavigationView with ScrollView with PageTabViewStyle()有所启发或帮助;

我的目标是获得一个包含多个 NavigationVIEw 的 PageTabVIEw,然后包含一个 ScrollVIEw。我希望它可以使用此代码:

@H_874_4@struct ContentVIEw: VIEw { var body: some VIEw { TabVIEw { NavigationVIEw { ScrollVIEw { Text("Nav 1") Spacer() } .navigationtitle("Scroll") } NavigationVIEw { ScrollVIEw { Text("Nav 2") Spacer() } .navigationtitle("Scroll 2") } } .tabVIEwStyle(PageTabVIEwStyle()) } }

但模拟器中的结果是这样的

SwiftUI NavigationView with ScrollView with PageTabViewStyle()

对我来说重要的是 NavigationVIEw 只包含 ScrollVIEw 以便能够在滚动时将 navigationtitle 更改为 .inline。

我在这里做错了什么还是这是一个错误?我想我可以使用 UIKit 的自定义 PageTabVIEw 来解决这个问题,但我不知道如何在 SwiftUI 中实现它。

我用 StackNavigationVIEwStyle() 尝试了“Yrb”的答案。不幸的是,这给了我一个奇怪的行为:

SwiftUI NavigationView with ScrollView with PageTabViewStyle()

解决方法

您需要像这样使用 StackNavigationViewStyle()

struct ContentView: View {
    var body: some View {
        TabView {
            NavigationView {
                ScrollView {
                    Text("Nav 1")
                    Spacer()
                }
                .navigationtitle("Scroll")
                .navigationBartitleDisplaymode(.inlinE) // inline added here
            }
            .navigationViewStyle(StackNavigationViewStyle()) //Added here

            NavigationView {
                ScrollView {
                    Text("Nav 2")
                    Spacer()
                }
                .navigationtitle("Scroll 2")
                .navigationBartitleDisplaymode(.inlinE) // inline added here
            }
            .navigationViewStyle(StackNavigationViewStyle()) //Added here
        }
        .tabViewStyle(PageTabViewStyle())
    }
}

您将获得主详细信息视图。如果您旋转设备,点击后退箭头,您将在横向看到它。使用 StackNavigationViewStyle 可以防止这种情况发生。

通常,它会出现在包含 NavigationView 的结构中,但由于您的(适当的)简单示例,您的 NavigationView 位于 TabView

编辑:这就是我说“简单示例”时所指的。如果您对此有任何进一步的问题,则需要提出一个新问题。所以帖子应该处理问题并继续前进,而不是不断修改问题。这是因为其他人需要看到这里做了什么并能够使用它。继续编辑它们对下一个人不公平。

如此,这是我对代码的最终编辑:

struct ContentView: View {
    var body: some View {
        TabView {
            Navigation1()
                .tag(0)
            
            Navigation2()
                .tag(1)
        }
        .tabViewStyle(PageTabViewStyle())
    }
}

我添加到单独的视图:

struct Navigation1: View {
    var body: some View {
        NavigationView {
            ScrollView {
                HStack{ //Remove this to see your "odd behavior"
                    Text("Navigation 1")
                        .padding()
                } //Remove this to see your "odd behavior"
                Spacer()
            }
            .BACkground(Color.orangE)
            .padding(.top,30)
            .navigationtitle("Scroll 1")
            .navigationBartitleDisplaymode(.inlinE) // inline added here
        }
        .navigationViewStyle(StackNavigationViewStyle()) //Added here
    }
}

唯一的区别是 1 换成了 2,我使用了不同的背景颜色。您看到的行为是因为当您尝试滚动 Text() 时,您实际上是在滚动视图之外。如果从 HStack 中删除 Navigation1,您可以看到它。背景颜色将缩小为一列,您将看到如果您尝试从其外部滚动,您将上下推动整个视图。这是预期的行为。

我添加了内边距,因为在这个简单的示例中,UI 的设计将在内联标题下运行。你需要自己处理。有很多选择,但您必须决定如何处理并查找。

大佬总结

以上是大佬教程为你收集整理的SwiftUI NavigationView with ScrollView with PageTabViewStyle()全部内容,希望文章能够帮你解决SwiftUI NavigationView with ScrollView with PageTabViewStyle()所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。