查看不扩展到完整列表行宽 - SwiftUI

View Not Expanding to Full List Line Width- SwiftUI

我在列表中嵌入了视图,每个 List 项一个 View,但出于某种原因,View 只占据列表行的一小部分,而不是比填满整行。嵌入的 ViewView 的预览中完全展开,所以我不确定为什么会这样。

列表View

import SwiftUI

struct AnnouncementsView: View{
    @Binding var announcements: [Announcement]
    @State var displayedMessage: String = ""
    @State var isDisplayingMessage: Bool = false
    
    static let sectionDateFormat: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "dd/MM/YYYY"
        return formatter
    }()
    var body: some View{
        //NavigationView{
        VStack{
            List($announcements){$announcement in
                AnnouncementView(announcement: $announcement)
            }
            Spacer()
        }
    }
}

列表项View

struct AnnouncementView: View{
    @Binding var announcement: Announcement
    @State private var sheetIsShowing: Bool = false
    static let sectionDateFormat: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "dd/MM/YYYY"
        return formatter
    }()
    var body: some View{
        HStack{
            Button(action: {
                sheetIsShowing = true
            }){
                if (!announcement.read){
                    Image(systemName: "exclamationmark.circle.fill")
                        .foregroundColor(.red)
                }
                Text(announcement.message)
                    .lineLimit(1)
                    .truncationMode(.tail)
                    .foregroundColor(.black)
                Spacer()
                Text("\(announcement.timestamp, formatter: Self.sectionDateFormat)")
                    .disabled(true)
            }
        }
        .padding()
        .sheet(isPresented:$sheetIsShowing){
            NavigationView{
                DetailedAnnouncementView(announcement: $announcement)
                    .navigationTitle(Text("\(announcement.timestamp, formatter: Self.sectionDateFormat)"))
                    .toolbar{
                        ToolbarItem(placement: .navigationBarLeading){
                            Button(action: {
                                announcement.read = true
                                sheetIsShowing = false
                            }){
                                Text("Mark as Read")
                            }
                        }
                        ToolbarItem(placement: .navigationBarTrailing){
                            Button(action: {
                                sheetIsShowing = false
                                announcement.read = false
                            }){
                                Text("Mark as Unread")
                            }
                        }
                    }
            }
        }
    }
}

我可能遗漏了一些非常基本的东西,但非常感谢任何帮助。

谢谢。

因此,如果没有提供 Stack,SwiftUI 似乎默认将 Button 的内容呈现为在 HStack 中。

但是,当在 List 中使用 Button 时,此默认行为变为默认设置,就好像它是 VStack 一样。 (请注意,它仅在 List 内使用时发生。在 LazyVStackScrollViewForEach 内使用时,默认 HStack 将保持不变)。

因此,为了确保 Button 的内容始终水平呈现,请通过将其内容显式嵌套在 HStack 中来指定它,而不是依赖于 Button' s "default" 行为(因为它现在似乎不一致)

所以,改变:

Button(action: ...) {
    //content
}

收件人:

Button(action: ...) {
    HStack {
        //content
    }
}