2

我有两个滚动视图放置在NavigationView. onAppear我希望两个 ScrollViews 都继承修饰符中提到的颜色。

但是,当我导航到第二个 ScrollView 并返回到第一个 ScrollView 时,第一个视图继承了第二个 ScrollView 颜色。

struct ScrollView1: View {
    var body: some View {
        NavigationView {
            ScrollView {
                NavigationLink(destination: ScrollView2()) {
                    Text("First View").padding()
                }.frame(maxWidth: .infinity)
            }.navigationBarTitle("First")
            .onAppear {
                UIScrollView.appearance().backgroundColor = UIColor.green
            }
        }
    }
}

struct ScrollView2: View {
    var body: some View {
        ScrollView {
            Text("Second View").frame(maxWidth: .infinity)
        }
        .onAppear {
            UIScrollView.appearance().backgroundColor = UIColor.gray
        }
    }
}

有谁知道我的第一个 ScrollView 将如何始终继承绿色和第二个灰色?

通过包装在 ZStack 中添加 ScrollView 颜色不会在滚动时将 NavigationBar 从大折叠到内联。

是否有任何其他解决方案可以同时实现这两者,即保留导航栏反弹行为以及 ScrollView 颜色。

4

1 回答 1

-1

首先,您可以backgroundColorUITableViewand中删除UIScrollView(您可以在 中执行此操作SceneDelegate,因此它只会执行一次):

UITableView.appearance().backgroundColor = UIColor.clear
UIScrollView.appearance().backgroundColor = UIColor.clear

然后使用ZStack添加背景颜色:

struct ScrollView1: View {
    var body: some View {
        NavigationView {
            ZStack {
                Color.green
                ScrollView {
                    NavigationLink(destination: ScrollView2()) {
                        Text("First View").padding()
                    }.frame(maxWidth: .infinity)
                }.navigationBarTitle("asdasd")
            }
        }
    }
}
struct ScrollView2: View {
    var body: some View {
        ZStack {
            Color.gray
            ScrollView {
                Text("Second View").frame(maxWidth: .infinity)
            }
        }
    }
}
于 2020-07-05T17:05:48.233 回答