使用 iOS14.5、Swift5.4、XCode12.5 和 SwiftUI,
我正在尝试构建简单的 DetailView,您可以使用 NavigationLink 导航到该视图。
一切正常,除了我不知道 DetailView 中 NavigationBar 的高度。(请注意,我通过调用.navigationBarTitleDisplayMode(.inline)DetailView 来使用 .inline 版本)。
我试图在 DetailView 中显示一个简单的两行 VStack。
事实证明,DetailView 的主体被 NavigationBar 覆盖,除非我将整个东西向下移动 56 个像素(通过使用Spacer().frame(height: 56))。
而且我什至不知道 NavigationBar 的精确高度,更糟糕的是,我不知道如何动态确定它的纵向和横向旋转。
无论旋转状态如何,如何使 DetailView 的主体从 NavBar 下方开始?
这里是 Portrait 的示例截图:
Left side: the title is cut off ! Right side: using a Spacer makes title appear
这是我打开navigationLink的方法:
NavigationLink(
destination: DetailView(session: session).navigationBarTitleDisplayMode(.inline),
tag: session.id ?? "",
selection: $selectedTag,
label: { EmptyView() }
)
这是整个细节屏幕:
(请注意 56 的 Spacer-distance 以使标题完全可见)
import SwiftUI
struct DetailView: View {
@State var session: THSession
var body: some View {
VStack(alignment: .leading) {
Spacer().frame(height: 56) // !!!!!!!!!! without this the title sits behind NavBar !!!!!!!!!!!!!!!!!!!
Text(session.title)
.font(.title)
.fontWeight(.bold)
.foregroundColor(.white)
Spacer().frame(height: 16)
HStack {
Text(session.invitationCode)
.font(.title)
.fontWeight(.bold)
.foregroundColor(.white)
}
Spacer()
}
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading)
.background(Color.red)
.ignoresSafeArea()
}
}
