Swift 中的顶部栏
TopBar in Swift
我正在学习 swift 但我遇到了问题。
我想制作一个覆盖整个屏幕顶部的顶部栏。现在的问题是我有一个我不明白的错误:“可选类型 'CGFloat?' 的值必须解包为 'CGFloat' 类型的值”
我想得到帮助提前谢谢你
import Foundation
struct ContentView: View {
var body: some View {
VStack{
TopBar()
Spacer()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct TopBar : View {
var body : some View{
VStack(spacing: 20){
HStack{
Text("News").font(.system(size: 20)).fontWeight(.semibold).foregroundColor(.white)
Spacer()
}
}.padding()
.padding(.top, UIApplication.shared.windows.last?.safeAreaInsets.top + 10) //line with error : Value of optional type 'CGFloat?' must be unwrapped to a value of type 'CGFloat'
.background(Color("Color"))
}
}```
当你使用 .last?
时,问号意味着 last
可能不存在——所以,你最终得到一个可选的 (CGFloat?
) 而不是 (non-optional ) CGFloat
.
如果您的原始值为 nil,您可以使用 nil 合并(??
运算符 -- https://www.hackingwithswift.com/example-code/language/what-is-the-nil-coalescing-operator)提供默认值:
.padding(.top, (UIApplication.shared.windows.last?.safeAreaInsets.top ?? 0) + 10)
但是,您应该知道 SwiftUI 会为您填充安全区域——您实际上不需要自己做。如果你想在安全区域插图下方有 10 磅的顶部填充,只需使用 .padding(.top, 10)
根据评论更新:
struct TopBar : View {
var body : some View {
VStack(spacing: 20) {
HStack{
Text("News").font(.system(size: 20)).fontWeight(.semibold).foregroundColor(.white)
Spacer()
}
}
.background(Color.red.edgesIgnoringSafeArea(.top))
}
}
我正在学习 swift 但我遇到了问题。 我想制作一个覆盖整个屏幕顶部的顶部栏。现在的问题是我有一个我不明白的错误:“可选类型 'CGFloat?' 的值必须解包为 'CGFloat' 类型的值”
我想得到帮助提前谢谢你
import Foundation
struct ContentView: View {
var body: some View {
VStack{
TopBar()
Spacer()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct TopBar : View {
var body : some View{
VStack(spacing: 20){
HStack{
Text("News").font(.system(size: 20)).fontWeight(.semibold).foregroundColor(.white)
Spacer()
}
}.padding()
.padding(.top, UIApplication.shared.windows.last?.safeAreaInsets.top + 10) //line with error : Value of optional type 'CGFloat?' must be unwrapped to a value of type 'CGFloat'
.background(Color("Color"))
}
}```
当你使用 .last?
时,问号意味着 last
可能不存在——所以,你最终得到一个可选的 (CGFloat?
) 而不是 (non-optional ) CGFloat
.
如果您的原始值为 nil,您可以使用 nil 合并(??
运算符 -- https://www.hackingwithswift.com/example-code/language/what-is-the-nil-coalescing-operator)提供默认值:
.padding(.top, (UIApplication.shared.windows.last?.safeAreaInsets.top ?? 0) + 10)
但是,您应该知道 SwiftUI 会为您填充安全区域——您实际上不需要自己做。如果你想在安全区域插图下方有 10 磅的顶部填充,只需使用 .padding(.top, 10)
根据评论更新:
struct TopBar : View {
var body : some View {
VStack(spacing: 20) {
HStack{
Text("News").font(.system(size: 20)).fontWeight(.semibold).foregroundColor(.white)
Spacer()
}
}
.background(Color.red.edgesIgnoringSafeArea(.top))
}
}