xcode iOS 16 - SwiftUI中NavigationView的背景颜色损坏

63lcw9qa  于 2022-12-14  发布在  iOS
关注(0)|答案(1)|浏览(153)

在iOS 16之前,NavigationView中的屏幕背景在SwiftUI中工作非常可靠。
在iOS 16中,使用屏幕键盘来回导航时会出现空白区域(无背景颜色):

再现代码:

import SwiftUI

struct ContentView: View {
    @State private var text: String = ""
    
    var body: some View {
        NavigationView {
            VStack {
                TextField("Edit field", text: $text)
                    .textFieldStyle(RoundedBorderTextFieldStyle())

                NavigationLink(destination: Text("Naviagtion target")) {
                    HStack {
                        Image(systemName: "link")
                        Text("Navigation Link")
                    }
                }
                .padding(30)
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .background(Color.gray)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

有什么办法解决这个问题吗?

mec1mxoz

mec1mxoz1#

它看起来和感觉上确实像一个bug,当键盘出现时调整的安全区域不会在你导航回来时重新调整,键盘不在那里。
解决这个问题的一个方法是调整背景对安全区域的概念,告诉它总是回收键盘空间:

.background(
  Color.gray
    .ignoresSafeArea(.keyboard)
)

因为您只调整了背景的安全区域,所以视图的其余部分应该继续保持原来的行为。这意味着它仍然被提升以适应(缺失的)键盘的空间要求,但不太明显。

相关问题