現在swiftでYouTube検索機能がついたAppを作成中です。
swiftUI→storyboardに反映している状態なのですが
画面下に余白が生まれてしまいます。
storyboardと根本的に違うと思われるので
苦戦しております。
コードはこちらです。
VideoRowViewswift
1import SwiftUI 2import URLImage 3 4struct VideoRowView: View { 5 @State var title: String 6 let imgURL: String 7 @State var description: String 8 9 var body: some View { 10 HStack{ 11 URLImage(URL(string: imgURL)!) {proxy in 12 proxy.image 13 .resizable() 14 .scaledToFit() 15 } 16 .frame(width: 120, height: 90) 17 .border(Color.yellow) 18 VStack{ 19 Text(title) 20 .font(.headline) 21 Text(description) 22 .font(.caption) 23 .lineLimit(3) 24 } 25 } 26 } 27} 28 29struct VideoRowView_Previews: PreviewProvider { 30 static var previews: some View { 31 VideoRowView(title: "これはタイトル", imgURL: "https://o2-m.com/dog1.png", description: "これは動画の説明です。これは動画の説明です。これは動画の説明です。これは動画の説明です。これは動画の説明です。これは動画の説明です。これは動画の説明です。これは動画の説明です。") 32 } 33} 34
ContentViewswift
1import SwiftUI 2 3 4let vc = UIStoryboard(name: "ContentViewHostingController", bundle: nil).instantiateViewController(identifier: "ContentViewHostingController") 5 6 7 8struct ContentView: View { 9 @State var results:Results? 10 @State private var keyword = "筋トレ" 11 @ObservedObject var searcher = YoutubeSearcher() 12 13 var body: some View { 14 NavigationView { 15 VStack { 16 HStack { 17 TextField("検索文字列", text: $keyword) 18 .textFieldStyle(RoundedBorderTextFieldStyle()) 19 .padding() 20 Button(action: { 21 self.searcher.search(keyword: self.keyword) 22 }) { 23 Text("検索") 24 } 25 .background( 26 Capsule() 27 .foregroundColor(.yellow) 28 .frame(width: 60, height: 30)) 29 .padding(20) 30 } 31 32 Spacer() 33 if self.searcher.results != nil { 34 List { 35 ForEach(self.searcher.results!.items) {item in 36 NavigationLink(destination: YoutubeView(url: "https://www.youtube.com/watch?v=" + item.vid.videoId)) { 37 VideoRowView(title: item.snippet.title, imgURL: item.snippet.thumbnails.default.url, description: item.snippet.description) 38 } 39 } 40 } 41 } 42 } 43 .navigationBarTitle("検索結果") 44 .navigationBarHidden(true) 45 } 46 } 47} 48 49struct ContentView_Previews: PreviewProvider { 50 static var previews: some View { 51 52 ContentView() 53 } 54} 55 56 57class ContentViewHostingController: UIHostingController<ContentView> { 58 59 required init?(coder aDecoder: NSCoder) { 60 super.init(coder: aDecoder, rootView: ContentView()) 61 62 } 63 64 override func viewDidLoad() { 65 super.viewDidLoad() 66 67 } 68} 69
YoutubeSearcherswift
1import Foundation 2 3class YoutubeSearcher: ObservableObject { 4 @Published var results:Results? 5 // 最大検索数 6 let maxResults = "10" 7 // APIKeyを設定 8 let APIKey = "AIzaSyAR14hihGDq5-Av9LYvFiK-sJM5sfBF8sw" 9 10 func search(keyword: String) ->() { 11 // リクエスト用の文字列を生成 12 guard let urlStr = "https://www.googleapis.com/youtube/v3/search?part=snippet&q=(keyword)&type=video&maxResults=(maxResults)&key=(APIKey)".addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) else { 13 fatalError("URL String error") 14 } 15 // URLに変換する 16 guard let url = URL(string:urlStr) else { 17 fatalError("Could'nt convert to url: (urlStr)") 18 } 19 20 // Youtube APIにリクエストを送る 21 let task = URLSession.shared.dataTask(with: url) { data, response, error in 22 if let jsonData = data { 23 let decodedData: Results 24 do { 25 decodedData = try JSONDecoder().decode(Results.self, from: jsonData) 26 } catch { 27 fatalError("Couldn't decode JSON data.") 28 } 29 // メインスレッドで実行 30 DispatchQueue.main.async { 31 self.results = decodedData 32 } 33 } else { 34 fatalError("Youtube API request error") 35 } 36 } 37 task.resume() 38 } 39} 40
YoutubeViewswift
1import SwiftUI 2import WebKit 3 4struct YoutubeView: UIViewRepresentable { 5 var url: String 6 7 func makeUIView(context: Context) -> WKWebView { 8 return WKWebView() 9 } 10 11 func updateUIView(_ uiView: WKWebView, context: Context) { 12 uiView.load(URLRequest(url: URL(string: url)!)) 13 } 14} 15 16struct YoutubeView_Previews: PreviewProvider { 17 static var previews: some View { 18 YoutubeView(url: "https://www.rutles.net") 19 } 20}
<試した事>
https://qiita.com/tsuzuki817/items/6c0f428fccbaca9927ed
http://swift.hiros-dot.net/?p=1013
上記のサイトを参考に試したのですが
画面全体に対する変更ではない?
と思われるため変更されませんでした・・・
swiftUIに詳しい方、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー