ios 在SwiftUI中切换视图后ScrollView重置位置

plicqrtu  于 2023-02-26  发布在  iOS
关注(0)|答案(1)|浏览(217)

我开始SwiftUI和我有问题,切换视图后,他们是我的页面顶部之间的差距,我不能解决它!
我想要这个(img1):img1但我有那个(img2):img2
我该怎么解决呢?
这是我的准则文件:所有新闻描述视图:

import SwiftUI

struct AllNewsDescriptionView: View {
    
    var AllNews: AllNews
    
    @State private var like = false
    @State private var dislike = false
    
    var body: some View {
            VStack {
                Image(AllNews.image)
                    .resizable()
                    .frame(height: 200.0)
                
                Text(AllNews.name)
                    .font(.title)
                    .fontWeight(.bold)
                    .foregroundColor(Color.black)
                    .multilineTextAlignment(.center)
                    .padding(.vertical)
                Text(AllNews.description)
                    .font(.footnote)
                    .fontWeight(.heavy)
                    .multilineTextAlignment(.center)
                Text(AllNews.articleContenu)
                    .font(.footnote)
                    .multilineTextAlignment(.center)
                    .padding(.top)
                Spacer()
                
                Button(like ? "✅" : "J'aime cette article"){
                    like.toggle()
                }
                .buttonStyle(.bordered)
                .tint(Color.blue)
                .foregroundColor(Color.black)
            }
        .padding()
    }
}

struct AllNewsDescriptionView_Previews: PreviewProvider {
    static var previews: some View {
        AllNewsDescriptionView(AllNews: AllNews.list[0])
    }
}

文件:所有新闻

import Foundation

struct AllNews : Identifiable {
    let id = UUID()
    
    let name: String
    let image: String
    let description: String
    let articleContenu: String
}

extension AllNews {
    static let list : [AllNews] = [
    AllNews(name: "ARTEMIS I lancé", image: "actu1", description: "La fusée a enfin décollé après de multiples revers", articleContenu: "Dans le cadre de la mission Artemis I, le SLS transportera le vaisseau spatial Orion en orbite terrestre, où il parcourra environ 64 000 kilomètres (40 000 miles) au-delà de la Lune au cours d'une mission de quatre à six semaines. Cette semaine, la NASA a placé sa mission Capstone CubeSat sur une orbite de halo presque rectiligne (Near-rectilinear halo orbit, en anglais) autour de la Lune. C'est l'orbite sur laquelle la station spatiale Gateway sera placée pour soutenir les missions Artemis II et l'exploration de l'espace lointain. Cette orbite offrira une ligne de vue continue de la Terre, permettant une communication ininterrompue entre la Terre et la Lune. Environ trois minutes après le décollage, le carénage du module de service et le système d'interruption de lancement se sont séparés du vaisseau spatial Orion. L'étage central du SLS a continué à tirer jusqu'à environ huit minutes après le lancement, où il a atteint l'orbite terrestre basse. A 1h56, le moteur principal de l'étage central du SLS s'est éteint et l'étage central s'est séparé de l'étage intermédiaire de propulsion cryogénique et du vaisseau spatial Orion."),
    AllNews(name: "Métamorphose de la conquête spatiale", image: "actu2", description: "l’espace est aujourd’hui en pleine évolution avec des innovations émergentes", articleContenu: "À ses débuts et pendant les longues années qui ont suivi, la conquête spatiale était menée par les États eux-mêmes. Premier homme en orbite, premier homme qui effectue une sortie extravéhiculaire, premier homme sur la Lune… Les records étaient alors établis par les pays, principalement les États-Unis et l’URSS qui, en pleine guerre froide, se livraient une bataille sans merci pour « être le premier à ». Depuis, le secteur spatial a incroyablement changé. S’il est vrai que, même à l’époque d’Apollo, la NASA collaborait avec des entreprises pour la conception de ses lanceurs, satellites, etc., elle était beaucoup plus impliquée dans les efforts de développement des différents engins et était, dans la majorité des cas, la seule entité pouvant décider du programme, de ses objectifs et des modalités d’une mission. Aujourd’hui, pour plusieurs raisons, le secteur spatial s’est métamorphosé, en partie grâce aux avancées technologiques.")
    ]
}

和文件:主视图

import Foundation

struct AllNews : Identifiable {
    let id = UUID()
    
    let name: String
    let image: String
    let description: String
    let articleContenu: String
}

extension AllNews {
    static let list : [AllNews] = [
    AllNews(name: "ARTEMIS I lancé", image: "actu1", description: "La fusée a enfin décollé après de multiples revers", articleContenu: "Dans le cadre de la mission Artemis I, le SLS transportera le vaisseau spatial Orion en orbite terrestre, où il parcourra environ 64 000 kilomètres (40 000 miles) au-delà de la Lune au cours d'une mission de quatre à six semaines. Cette semaine, la NASA a placé sa mission Capstone CubeSat sur une orbite de halo presque rectiligne (Near-rectilinear halo orbit, en anglais) autour de la Lune. C'est l'orbite sur laquelle la station spatiale Gateway sera placée pour soutenir les missions Artemis II et l'exploration de l'espace lointain. Cette orbite offrira une ligne de vue continue de la Terre, permettant une communication ininterrompue entre la Terre et la Lune. Environ trois minutes après le décollage, le carénage du module de service et le système d'interruption de lancement se sont séparés du vaisseau spatial Orion. L'étage central du SLS a continué à tirer jusqu'à environ huit minutes après le lancement, où il a atteint l'orbite terrestre basse. A 1h56, le moteur principal de l'étage central du SLS s'est éteint et l'étage central s'est séparé de l'étage intermédiaire de propulsion cryogénique et du vaisseau spatial Orion."),
    AllNews(name: "Métamorphose de la conquête spatiale", image: "actu2", description: "l’espace est aujourd’hui en pleine évolution avec des innovations émergentes", articleContenu: "À ses débuts et pendant les longues années qui ont suivi, la conquête spatiale était menée par les États eux-mêmes. Premier homme en orbite, premier homme qui effectue une sortie extravéhiculaire, premier homme sur la Lune… Les records étaient alors établis par les pays, principalement les États-Unis et l’URSS qui, en pleine guerre froide, se livraient une bataille sans merci pour « être le premier à ». Depuis, le secteur spatial a incroyablement changé. S’il est vrai que, même à l’époque d’Apollo, la NASA collaborait avec des entreprises pour la conception de ses lanceurs, satellites, etc., elle était beaucoup plus impliquée dans les efforts de développement des différents engins et était, dans la majorité des cas, la seule entité pouvant décider du programme, de ses objectifs et des modalités d’une mission. Aujourd’hui, pour plusieurs raisons, le secteur spatial s’est métamorphosé, en partie grâce aux avancées technologiques.")
    ]
}

因此,该应用程序是(img3 & 4):img3,当我们点击一个新的,我们来的文章,但有一个差距,我需要它走了。如果你知道我可以使用NavigationView对我的文章,我在这里太;)!
img4
如果你能帮我的话,非常感谢你。

f0brbegy

f0brbegy1#

您需要设置导航标题显示模式。您看到的空间是从上一屏幕继承的大导航标题。

struct AllNewsDescriptionView: View {
    
    var AllNews: AllNews
    
    @State private var like = false
    @State private var dislike = false
    
    var body: some View {
            VStack {
                Image(AllNews.image)
                    .resizable()
                    .frame(height: 200.0)
                
                Text(AllNews.name)
                    .font(.title)
                    .fontWeight(.bold)
                    .foregroundColor(Color.black)
                    .multilineTextAlignment(.center)
                    .padding(.vertical)
                Text(AllNews.description)
                    .font(.footnote)
                    .fontWeight(.heavy)
                    .multilineTextAlignment(.center)
                Text(AllNews.articleContenu)
                    .font(.footnote)
                    .multilineTextAlignment(.center)
                    .padding(.top)
                Spacer()
                
                Button(like ? "✅" : "J'aime cette article"){
                    like.toggle()
                }
                .buttonStyle(.bordered)
                .tint(Color.blue)
                .foregroundColor(Color.black)
            }.padding()
                .navigationBarTitleDisplayMode(.inline)
    }
}

相关问题