【问题标题】:Creating a UI using SwiftUI使用 SwiftUI 创建 UI
【发布时间】:2021-09-22 06:38:01
【问题描述】:

这是使用 UIKit 创建的现有应用的屏幕截图。这是一个内部问题跟踪器应用程序。左边有一个问题编号。右侧面板包含问题标题、问题描述、发布的详细信息、状态。

我的模型是一个名为 Issue 的结构,具有属性 id(用于问题编号)、标题、描述、postedBy、postedDate 和状态。

我正在努力在 SwiftUI 中创建它,尤其是使用修饰符。我不需要最终的结果和以前完全一样,相似就足够了。

这是我现在拥有的:

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                ForEach(Issue.example) { issue in
                    NavigationLink(destination: IssueView(issue: issue)) {
                        IssueRow(issue: issue)
                    }
                }
            }
        }
    }
}

struct IssueRow: View {
var issue: Issue

var body: some View {
    HStack {
        Image(systemName: "\(issue.id).circle")
            .frame(width: 30, height: 30)
            .padding()
            .background(Color.blue)
            .clipShape(Circle())
        
        VStack {
            Section(header: Text(issue.title)
                            .padding(), footer:
                Text("Posted by \(issue.postedBy) on \(issue.postedDate)")
                    .padding()

                ) {
                    Text(issue.description + "~")
                        .padding()
            }
        }
        .listStyle(GroupedListStyle())
       }
    }
}

这会产生以下结果:

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    这是我短时间内所能做的。希望它能给你一些关于 “修饰符”。

    import SwiftUI
    
    @main
    struct TestApp: App {
        var body: some Scene {
            WindowGroup {
                ContentView()
            }
        }
    }
    
    struct Issue: Decodable, Identifiable {
        let id: Int
        let title: String
        let descript: String
        
        var status = "Yet To Start"
        var postedBy = "someone"
        var postedDate = Date()
        
        static var example = [
            Issue(id: 1, title: "Feature Request", descript: "some description1"),
            Issue(id: 2, title: "Feature Request", descript: "some description2"),
            Issue(id: 3, title: "Feature Request", descript: "some description3")
        ]
    }
    
    struct ContentView: View {
        var body: some View {
            NavigationView {
                List {
                    ForEach(Issue.example, id: \.id) { issue in
                        NavigationLink(destination: Text(issue.title)) {
                            IssueRow(issue: issue)
                                .background(LinearGradient(gradient:
                                   Gradient(colors: [Color(UIColor.systemIndigo), .blue]),
                                  startPoint: .top, endPoint: .bottom))
                        }
                    }
                }
            }.navigationViewStyle(StackNavigationViewStyle())
        }
    }
    
    struct IssueRow: View {
        var issue: Issue
        
        var body: some View {
            HStack {
                Text("\(issue.id)").bold()
                    .padding(20)
                    .foregroundColor(.red)
                    .background(Color(UIColor.systemGray5))
                    .clipShape(RoundedRectangle(cornerSize: CGSize(width: 10, height: 10)))
                
                VStack (alignment: .leading) {
                    Section(header: Text(issue.title).foregroundColor(.yellow),
                           footer: Text("Posted by \(issue.postedBy) on \(inMyFormat(issue.postedDate))")
                                .foregroundColor(.yellow).font(.caption)
                    ) {
                        Text(issue.descript).foregroundColor(.white)
                    }
                    HStack {
                        Spacer()
                        Text(issue.status).foregroundColor(.white)
                    }
                }.padding(.horizontal, 10)
                .listStyle(GroupedListStyle())
            }.padding(.horizontal, 10)
            
        }
        
        func inMyFormat(_ date: Date) -> String {
            // format the date here
            return "13 July 2021"
        }
    }
    

    【讨论】:

    • 在你的解决方案中,蓝色渐变并没有一直延伸到左右,顶部和底部也有间隙。似乎没有明确的修饰符。为什么会有这些空间以及如何摆脱它们?
    • 我得到了答案 - 将此修饰符 .listRowInsets(EdgeInsets()) 添加到列表内的视图中,根据此堆栈溢出线程:stackoverflow.com/questions/56614080/…
    猜你喜欢
    • 2020-02-19
    • 2020-08-16
    • 2021-10-31
    • 1970-01-01
    • 2021-05-03
    • 2016-04-02
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多