Home > database >  Create multiple webviews in a for loop swift
Create multiple webviews in a for loop swift

Time:12-24

I am attempting to display 5 web views and I would like the web views to be created in a for loop. The code I am currently using creates only one web view where it should create one for every url in pages. Any help would be appreciated!

import UIKit
import Foundation
import WebKit
import AVFoundation

class displayviews: UIViewController, WKUIDelegate {
    
    var pages = ["https://example.com", "https://example", "https://example", "https://example.com", "https://example.com"]
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        for i in pages{
            var inti = Int(i) ?? 0
            //var currentwebview = String("webView")   i
            let myWebView:WKWebView = WKWebView(frame: CGRect(x:0, y:CGFloat(inti*200), width: UIScreen.main.bounds.width, height:UIScreen.main.bounds.height/CGFloat(pages.count)))
            myWebView.uiDelegate = self
            self.view.addSubview(myWebView)
            //1. Load web site into my web view
            let myURL = URL(string: pages[inti])
            let myURLRequest:URLRequest = URLRequest(url: myURL!)
            myWebView.load(myURLRequest)
        }
    }
}

CodePudding user response:

Your code is creating the 5 webviews, the problem is that they are being placed on top of each other and as such you can only see the top most one. You can either use a stackview like on the following example or set constraints on the webviews.

class ViewController: UIViewController, WKUIDelegate {
    
    var pages = ["https://example.com", "https://example.com", "https://example.com", "https://example.com", "https://example.com"]
    
    lazy var stackView: UIStackView = {
        let view = UIStackView()
        view.axis = .vertical
        view.translatesAutoresizingMaskIntoConstraints = false
        view.distribution = .fillEqually
        self.view.addSubview(view)
        NSLayoutConstraint.activate([
            view.leftAnchor.constraint(equalTo: self.view.leftAnchor),
            view.topAnchor.constraint(equalTo: self.view.topAnchor),
            view.rightAnchor.constraint(equalTo: self.view.rightAnchor),
            view.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
        ])
        return view
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        for i in pages{
            var inti = Int(i) ?? 0
            //var currentwebview = String("webView")   i
            let myWebView:WKWebView = WKWebView(frame: CGRect(x:0, y:CGFloat(inti*200), width: UIScreen.main.bounds.width, height:UIScreen.main.bounds.height/CGFloat(pages.count)))
            myWebView.uiDelegate = self
            //self.view.addSubview(myWebView)
            stackView.addArrangedSubview(myWebView)
            //1. Load web site into my web view
            let myURL = URL(string: pages[inti])
            let myURLRequest:URLRequest = URLRequest(url: myURL!)
            myWebView.load(myURLRequest)
        }
        
    }
}
  • Related