Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WKWebView LayoutConstraints issue

I have created a simple webview app. But there is a small problem and I can not fix it. It loads the first page without issue.

enter image description here


When I click to the first input, the program crashes and the error code is below:

2017-10-28 23:50:54.289690+0400 BFI Schools[68425:3885613] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. 
Try this: 
    (1) look at each constraint and try to figure out which you don't expect; 
    (2) find the code that added the unwanted constraint or constraints and fix it. 
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 

My code is below:

//
//  ViewController.swift
//  BFI Schools
//
//  Created by Kamandar Abdullayev on 10/28/17.
//  Copyright © 2017 ROOM404.AZ. All rights reserved.
//

import UIKit
import WebKit

class ViewController: UIViewController , UIWebViewDelegate {
    @IBOutlet weak var webView: UIWebView!
    @IBOutlet weak var spinner: UIActivityIndicatorView!

    override func viewDidLoad() {
        super.viewDidLoad()

        view.translatesAutoresizingMaskIntoConstraints=false

        let url = URL(string: "https://www.parent.e-hism.co")!
        let request = URLRequest(url: url)

        if Reachability.isConnectedToNetwork() == true {
            webView.loadRequest(request)
        } else {
            let alert = UIAlertView(title: "No Internet Connection", message: "Make sure your device is connected to the internet.", delegate: nil, cancelButtonTitle: "OK")
            alert.show()
        }
    }

    func webViewDidStartLoad(_ : UIWebView) {
        spinner.startAnimating()
    }

    func webViewDidFinishLoad(_ : UIWebView) {
        spinner.stopAnimating()
    }
}

I have tried all help that I find on the Internet, but no luck.

like image 743
maxileft Avatar asked Oct 29 '25 08:10

maxileft


2 Answers

Based on the following captures from Reveal, it seems like an Auto Layout issue in Apple’s code. I bet they will fix it at some point.

broken constraint view hierarchy

like image 109
Jano Avatar answered Oct 30 '25 23:10

Jano


In general you should follow next flow

  1. Add webView as a subview to UIViewController's view (you might have done it in XIB or Storyboard)
  2. Add Autolayout constraints between webView and UIViewController's view in code or in Interface Builder
  3. Also, please remove

    view.translatesAutoresizingMaskIntoConstraints=false

If everything about is OK, please attach your XIB or Storyboard.

Update Here is my ViewController that shows WKWebView only.

    class ViewController: UIViewController {

        lazy var webView: WKWebView = {
            let webView = WKWebView(frame: .zero)
            webView.translatesAutoresizingMaskIntoConstraints = false
            return webView
        }()

        override func viewDidLoad() {
            super.viewDidLoad()

            // layout code
            view.addSubview(webView)
            view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[webView]|", options: [], metrics: nil, views: ["webView": webView]))
            view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[webView]|", options: [], metrics: nil, views: ["webView": webView]))

            // and then code to load request

        }
    }
like image 28
Sander Avatar answered Oct 31 '25 01:10

Sander



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!