在我的 SwiftUI iOS 应用程序中添加 TabView 时,导航栏停止覆盖缺口
我尝试为 TabView 实现创建另一个文件(修改 SceneDeletage 等)
这是一个没有 TabView 的简单代码,它使导航栏覆盖安全区域(又名缺口)
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView{
ScrollView{
HStack{
VStack{
ForEach((1...10), id: \.self){_ in
Text("Hello")
.padding(.leading, 20)
}
}
Spacer()
//.padding(.leading, 20)
}
}
.navigationBarTitle("Title Covers Safe Area")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个带有 TabView 的代码,它使导航栏不会覆盖安全区域
import SwiftUI
struct ContentView: View {
var body: some View {
TabView {
NavigationView{ …Run Code Online (Sandbox Code Playgroud) 使用 Swift 5.3.2、Xcode 12.4、iOS 14.4、
我正在尝试在 SwiftUI 中制作一个简单的 Page-TabView (参见下面的代码摘录)。
当旋转到横向或返回纵向时,出现问题(参见视频):
每当我旋转 iPhone 时,TabView 都会“跳转”到随机选项卡编号。
为什么是这样 ?
我该怎么做才能使 TabView 在旋转时保持当前选项卡号?
(我使用的是iPhoneX)
新的 iOS14 TabView 的 PageControl 功能似乎存在更多问题,如此处所述。(也许旋转设备时的“随机选项卡编号”与所描述的布局问题有关)
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
TabView {
Text("1")
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.pink)
Text("2")
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.yellow)
Text("3")
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.green)
Text("4")
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.blue)
}
.tabViewStyle(PageTabViewStyle())
}
}
}
Run Code Online (Sandbox Code Playgroud) 大家好。我正在开发一个显示一些鸣叫的简单SwiftUI应用程序。它具有一个带两个视图的选项卡视图:将显示推文的主页和一个辅助视图。
问题在于主页上有一个NavigationView。如果我选择仅显示主页,则一切似乎都正确,但是当我从显示TabView并向下滚动时,NavigationView感觉有点奇怪。
由于我不擅长解释,因此这里有一些图片:
我想添加.edgesIgnoringSafeArea(.top),但是NavigationView现在被该缺口隐藏了,并且没有效果。
有什么办法可以使NavigationView像第一个图像一样显示?
任何帮助表示赞赏。提前致谢。
HomePageView:
struct HomePageView: View {
var body: some View {
NavigationView {
List {
//tweet code
}
.navigationBarTitle("Your feed")
}
}
}
Run Code Online (Sandbox Code Playgroud)
TabView:
struct TabController: View {
@State private var selection = 0
var body: some View {
TabView(selection: $selection){
HomePageView()
.tabItem {
VStack {
Image(systemName: "house.fill")
.font(.title)
}
}
.tag(0)
Text("Second View")
.font(.title)
.tabItem {
VStack {
Image(systemName: "bell.fill")
.font(.title)
}
} …Run Code Online (Sandbox Code Playgroud) 我希望 .edgesIgnoringSafeArea(.all) 将内容适合到画布的顶部
我希望它显示如下: https: //i.stack.imgur.com/RzrO6.png
相反,它显示如下: https: //i.stack.imgur.com/sbbaU.png
内容查看:
TabView {
NavigationView {
MainContentView()
}
...
}
Run Code Online (Sandbox Code Playgroud)
主要内容查看:
var body: some View {
VStack(alignment: .leading, spacing: 20) {
...
}
.padding([.horizontal, .top])
.navigationBarTitle("Title")
}
Run Code Online (Sandbox Code Playgroud)
详细查看:
struct PostDetail: View {
var post: Post
var body: some View {
List {
Image(post.imageName)
.resizable()
.aspectRatio(contentMode: .fit)
.listRowInsets(EdgeInsets())
VStack(spacing: 20) {
Text(post.name)
.foregroundColor(.primary)
.font(.largeTitle)
.fontWeight(.bold)
Text(post.description)
.foregroundColor(.primary)
.font(.body)
.lineLimit(nil)
.lineSpacing(12)
VStack {
HStack {
Spacer()
ViewMoreButton(post: post)
Spacer()
}
}
}
.padding(.top)
.padding(.bottom) …Run Code Online (Sandbox Code Playgroud)