Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法使用VStack使ScrollView在SwiftUI中工作_Ios_Swift_Swiftui - Fatal编程技术网

Ios 无法使用VStack使ScrollView在SwiftUI中工作

Ios 无法使用VStack使ScrollView在SwiftUI中工作,ios,swift,swiftui,Ios,Swift,Swiftui,每次我尝试将scrollview或导航视图添加到我的swiftui代码中时,都会导致应用程序无法从api加载任何内容。目前我正在使用OMDB api。粘贴的是我的电影商店和我的ContentView。目前,我正在使用自定义卡片视图来显示电影商店中的图像和标题,但在尝试启用滚动视图后,渲染应用程序的整个预览将完全变为白色。在我注释掉滚动视图之前,不会再显示任何内容。我尝试使用水平视图和简单的图像和文本vstack来查看卡片视图是否与滚动视图混淆 我遵循的教程经过一些修改后达到了这一步,如下所示:

每次我尝试将scrollview或导航视图添加到我的swiftui代码中时,都会导致应用程序无法从api加载任何内容。目前我正在使用OMDB api。粘贴的是我的电影商店和我的ContentView。目前,我正在使用自定义卡片视图来显示电影商店中的图像和标题,但在尝试启用滚动视图后,渲染应用程序的整个预览将完全变为白色。在我注释掉滚动视图之前,不会再显示任何内容。我尝试使用水平视图和简单的图像和文本vstack来查看卡片视图是否与滚动视图混淆

我遵循的教程经过一些修改后达到了这一步,如下所示:

目前我正在运行Xcode 11.6

import Foundation

struct MovieResponse : Decodable{
    let movies: [Movie]
    
    private enum CodingKeys:String, CodingKey{
        case movies = "Search"
    }
}
struct Movie: Decodable{
    let imdbID :String
    let title: String
    let poster: String
    let type: String
    let year: String
    
    private enum CodingKeys: String, CodingKey{
        case imdbID
        case title = "Title"
        case poster = "Poster"
        case type = "Type"
        case year = "Year"
    }
}

class MovieStore: ObservableObject{
    @Published var movies: [Movie]? = [Movie]()
    
    func getAll(){
        guard let url = URL(string: "") else{
                fatalError("Invalid url")
        }
        
        URLSession.shared.dataTask(with: url) { data, response, error in
            guard let data = data, error == nil else{
                return
            }
            let movieResponse = try? JSONDecoder().decode(MovieResponse.self, from:data)
            
            
            if let movieResponse = movieResponse {
                DispatchQueue.main.async{
                    self.movies = movieResponse.movies
                }
            }
        }.resume()
    }
}
编辑:

我可以通过滚动api中弹出的电影来生成应用程序。但仅使用list属性。我注意到我得到了一个错误,不确定它是否会影响api的ping

2020-08-0118:28:26.274953-0500纽约时报[19421:1105938]任务。完成时出现错误[-1002]error Domain=NSURLErrorDomain Code=-1002“unsupported URL”UserInfo={NSUnderlyingError=0x600003c14000{error Domain=kcferrorrdomaincfnetwork Code=-1002“(null)”},nserrorfailingurstringkey=N/A,NSErrorFailingURLKey=N/A,NSLocalizedDescription=unsupported URL}

您的问题似乎缺少查看代码。刚刚添加了查看代码的屏幕截图,谢谢。请不要发布代码图像-将您的代码直接粘贴到问题中。尝试将您的ForEach放在列表中,而不是HStack和ScrollView。我能够使正常的VStack和ScrollView正常工作,但在我将模拟器设置为横向然后恢复正常之前,什么都没有显示。不知道为什么会发生这种情况您的问题似乎缺少查看代码。只添加了查看代码的屏幕截图,谢谢。请不要发布代码图像-直接将代码粘贴到问题中。尝试将您的ForEach放在列表中,而不是HStack和ScrollView。我能够使正常的VStack和ScrollView正常工作,但在我将模拟器设置为横向然后恢复正常之前,什么都没有显示。不知道为什么会这样
import SwiftUI

struct CardView: View {
    
    var image: URLImage
    var type: String
    var title: String
    var year: String
    
    var body: some View {
        VStack {
            image
                .aspectRatio(contentMode: .fit)
 
            HStack {
                VStack(alignment: .leading) {
                    Text(type)
                        .font(.headline)
                        .foregroundColor(.secondary)
                    Text(title)
                        .font(.title)
                        .fontWeight(.black)
                        .foregroundColor(.primary)
                        .lineLimit(3)
                    Text(year)
                        .font(.caption)
                        .foregroundColor(.secondary)
                }
                .layoutPriority(100)
 
                Spacer()
            }
            .padding()
        }
        .cornerRadius(10)
        .overlay(
            RoundedRectangle(cornerRadius: 10)
                .stroke(Color(.sRGB, red: 150/255, green: 150/255, blue: 150/255, opacity: 0.1), lineWidth: 1)
        )
        .padding([.top, .horizontal])
    }
}


struct ContentView: View {
    
    @ObservedObject var store: MovieStore
    
    var body: some View {
//        ScrollView{
            HStack{
                ForEach(store.movies ?? [Movie](), id: \.imdbID){ movie in
                    VStack{
//                        URLImage(url: movie.poster)
//                            .frame(width: 100, height: 150)
//                        Text(movie.title)
//                            .frame(maxHeight: .infinity, alignment: .top)
                        CardView(image: URLImage(url:movie.poster), type: movie.type, title: movie.title, year: movie.year)
                    }
                }
            }
//        }
        
        
        .onAppear(){
            self.store.getAll()
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView(store: MovieStore())
    }
}


2020-08-01 18:28:26.274953-0500 Nyx[19421:1105938] Task <B38BF736-765C-4C69-9ADE-AD889ED7BBE5>.<4> finished with error [-1002] Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={NSUnderlyingError=0x600003c14000 {Error Domain=kCFErrorDomainCFNetwork Code=-1002 "(null)"}, NSErrorFailingURLStringKey=N/A, NSErrorFailingURLKey=N/A, NSLocalizedDescription=unsupported URL}