首页 > 解决方案 > 当单个非滚动项在 VStack 中时,SwiftUI 不会折叠导航栏

问题描述

当我滚动导航栏时,我遇到了一个问题,导航栏不会折叠成一个小导航栏,只有当VStack.

以下代码工作正常

var body: some View {
    NavigationView {
        VStack {
            ScrollView {
                LazyVStack {
                    ForEach(0..<100) { number in
                        Text("\(number)")
                    }
                }
            }
        }
        .navigationBarTitle("Home")
    }
}

并运行如下:

在此处输入图像描述

但是当我在顶层添加其他内容时VStack,导航栏不再折叠。所以这段代码:

var body: some View {
    NavigationView {
        VStack {
            SegmentedControl(selectedSegmentIndex: $currentTabIndex, segments: [.new, .new])
            ScrollView {
                LazyVStack {
                    ForEach(0..<100) { number in
                        Text("\(number)")
                    }
                }
            }
        }
        .navigationBarTitle("Home")
    }
}

结果是:

在此处输入图像描述

有没有办法将滚动视图的偏移量与导航栏折叠联系起来?或任何其他解决方法?

标签: swiftswiftui

解决方案


折叠是 的一种特殊行为NavigationView & ScrollView/List。所以如果你想要它,把所有东西都放在里面ScrollView,比如

var body: some View {
    NavigationView {
        ScrollView {
            VStack {
                SegmentedControl(selectedSegmentIndex: $currentTabIndex, 
                    segments: [.new, .new])
                LazyVStack {
                    ForEach(0..<100) { number in
                        Text("\(number)")
                    }
                }
            }
        }
        .navigationBarTitle("Home")
    }
}

推荐阅读