kam*_*pro 17 ios swift swiftui
我无法ScrollView在 SwiftUI下设置背景颜色。当我使用.background(Color.red)背景时,背景被切断,因此它不会进入导航栏,并且滚动似乎被破坏了。我尝试了几个解决方案,但每个都不起作用。我有一个简单的视图层次结构
NavigationView {
ScrollView([.vertical], showsIndicators: true) {
VStack {
ForEach(0...50, id: \.self) { _ in
Text("Text text")
}
}
}
.navigationBarTitle("Title", displayMode: .large)
}
.navigationViewStyle(StackNavigationViewStyle())
Run Code Online (Sandbox Code Playgroud)
它按预期工作
现在,我想添加背景颜色,我尝试了以下解决方案
NavigationView {
ScrollView([.vertical], showsIndicators: true) {
VStack {
ForEach(0...50, id: \.self) { _ in
Text("Text text")
}
}
}
.background(Color.red)
.navigationBarTitle("Title", displayMode: .large)
}
.navigationViewStyle(StackNavigationViewStyle())
Run Code Online (Sandbox Code Playgroud)
结果
NavigationView {
ZStack {
Color.red
ScrollView([.vertical], showsIndicators: true) {
VStack {
ForEach(0...50, id: \.self) { _ in
Text("Text text")
}
}
}
.navigationBarTitle("Title", displayMode: .large)
}
}
.navigationViewStyle(StackNavigationViewStyle())
Run Code Online (Sandbox Code Playgroud)
结果
NavigationView {
ZStack {
Color.red.edgesIgnoringSafeArea([.all])
ScrollView([.vertical], showsIndicators: true) {
VStack {
ForEach(0...50, id: \.self) { _ in
Text("Text text")
}
}
}
.navigationBarTitle("Title", displayMode: .large)
}
}
.navigationViewStyle(StackNavigationViewStyle())
Run Code Online (Sandbox Code Playgroud)
结果
如何在ScrollViewpacked in下设置背景色NavigationView?
// 编辑:
下面的动画呈现了一个理想的效果(它是用 UIKit 制作的)。
在用尽所有可能性之后,我找到了以下解决方案,该解决方案非常适合您想要实现的目标。
struct DemoView: View {
init(){
let navigationBarAppearance = UINavigationBarAppearance()
navigationBarAppearance.backgroundColor = UIColor.red
UIScrollView.appearance().backgroundColor = UIColor.red
}
var body: some View {
NavigationView{
ScrollView{
VStack{
ForEach(0..<30, id: \.self){ _ in
Text("Text Text").foregroundColor(Color.black)
}
}.frame(maxWidth: .infinity)
.background(Color(UIColor.red))
}.navigationBarTitle("Title")
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助;)
你可以这样:
struct ContentView: View {
init() {
//Use this if NavigationBarTitle is with Large Font
UINavigationBar.appearance().backgroundColor = .red
}
var body: some View {
NavigationView {
ScrollView([.vertical], showsIndicators: true) {
VStack {
ForEach(0...70, id: \.self) { _ in
Text("Text text")
}
}.frame(minWidth: 0, maxWidth: .infinity)
.background(Color(UIColor.red))
}
.navigationBarTitle("Title", displayMode: .large)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是完整的解决方案,因为顶部安全边缘,但希望它可以帮助您更接近。
PS 我尝试忽略顶部安全边缘,但这会导致导航栏间距问题
| 归档时间: |
|
| 查看次数: |
3830 次 |
| 最近记录: |