ios - 向 WebView 添加约束时出错 - Swift

标签 ios swift webkit

我正在用 swift 练习 Webkit。我正在关注 this tutorial为了同样的目的。我在代码的前几行遇到了一个错误。

这是我目前在 ViewController.swift 中的内容:

import UIKit
import WebKit

class ViewController: UIViewController {

var webView : WKWebView

required init(coder aDecoder: NSCoder) {
    self.webView = WKWebView(frame: CGRectZero)
    super.init(coder: aDecoder)!
}

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.addSubview(webView)
    webView.translatesAutoresizingMaskIntoConstraints = false
    let height = NSLayoutConstraint(item: webView, attribute: .Height, relatedBy: .Equal, toItem: view, attribute: .Height, multiplier: 1, constant: 0)
    let width = NSLayoutConstraint(item: webView, attribute: .Width, relatedBy: .Equal, toItem: view, attribute: .Width, multiplier: 1, constant: 0)
    webView.addConstraints([height,width])

    let url = NSURL(string: "http://www.google.com")
    let urlRequest = NSURLRequest(URL: url!)
    webView.loadRequest(urlRequest)

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}


}

下面是控制台错误输出的样子:

2016-10-27 11:29:09.015 Browser[68308:1113663] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '***
+[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: Constraint items must each be an instance of UIView, or NSLayoutGuide.'
*** First throw call stack: (   0   CoreFoundation                      0x00000001060e0d85 __exceptionPreprocess + 165  1   libobjc.A.dylib    0x0000000108486deb objc_exception_throw + 48     2   CoreFoundation       0x00000001060e0cbd +[NSException raise:format:] + 205  3   Foundation  0x00000001064af0ac +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]
+ 277   4   Browser                             0x0000000105ef890b _TTOFCSo18NSLayoutConstraintCfT4itemPs9AnyObject_9attributeOSC17NSLayoutAttribute9relatedByOSC16NSLayoutRelation6toItemGSqPS0___9attributeS1_10multiplierV12CoreGraphics7CGFloat8constantS4__S_
+ 123   5   Browser                             0x0000000105ef78ee _TFC7Browser14ViewController11viewDidLoadfT_T_ + 494     6   Browser                             0x0000000105ef7c12 _TToFC7Browser14ViewController11viewDidLoadfT_T_ + 34    7   UIKit                               0x0000000106aa5984
-[UIViewController loadViewIfRequired] + 1198   8   UIKit                               0x0000000106aa5cd3 -[UIViewController view] + 27    9   UIKit            0x000000010697bfb4 -[UIWindow addRootViewControllerViewIfPossible] + 61    10  UIKit                               0x000000010697c69d
-[UIWindow _setHidden:forced:] + 282    11  UIKit                               0x000000010698e180 -[UIWindow makeKeyAndVisible] + 42   12  UIKit       0x0000000106902ed9 -[UIApplication
_callInitializationDelegatesForMainScene:transitionContext:] + 4131     13  UIKit                               0x0000000106909568
-[UIApplication _runWithMainScene:transitionContext:completion:] + 1769     14  UIKit                               0x0000000106906714
-[UIApplication workspaceDidEndTransaction:] + 188  15  FrontBoardServices                  0x000000010a3558c8
__FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24   16  FrontBoardServices                  0x000000010a355741
-[FBSSerialQueue _performNext] + 178    17  FrontBoardServices                  0x000000010a355aca -[FBSSerialQueue _performNextFromRunLoopSource] + 45     18  CoreFoundation                      0x0000000106006301
__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17     19  CoreFoundation                      0x0000000105ffc22c
__CFRunLoopDoSources0 + 556     20  CoreFoundation                      0x0000000105ffb6e3 __CFRunLoopRun + 867     21  CoreFoundation            0x0000000105ffb0f8 CFRunLoopRunSpecific + 488     22  UIKit               0x0000000106905f21 -[UIApplication _run] + 402  23  UIKit              0x000000010690af09 UIApplicationMain + 171   24  Browser                0x0000000105ef92f2 main + 114    25  libdyld.dylib                       0x0000000108f5d92d start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException

我是初学者,不用说,我不知道这意味着什么。 另外我收到错误消息 Thread 1: signal SIGABRT 如果我忽略删除我之前创建的 socket 引用,我通常会得到它。在这种情况下,我没有创建任何导出。

我已经在 Stack 上浏览了一些关于 Objective C 中类似问题的其他答案,但我不太理解。

我知道解决方案可能相对简单,但我们将不胜感激。

最佳答案

每个 View 都需要 4 个约束,以便系统可以计算:x、y、宽度、高度(标签和 ImageView 已经具有固有尺寸,但如果需要,您仍然可以约束它们)。以下是 webview 的 4 个约束条件:

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(webView)
        webView.translatesAutoresizingMaskIntoConstraints = false
        let attributes: [NSLayoutAttribute] = [.centerX, .centerY, .width, .height]
        NSLayoutConstraint.activate(attributes.map {NSLayoutConstraint(item: webView, attribute: $0, relatedBy: .equal, toItem: webView.superview, attribute: $0, multiplier: 1, constant: 0) })
        let url = URL(string: "http://www.google.com")!
        let urlRequest = URLRequest(url: url)
        webView.load(urlRequest)
    }

关于ios - 向 WebView 添加约束时出错 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40277353/

相关文章:

regex - Swift 正则表达式特殊字符

swift - 更改当您长按 WKWebView 中的链接时出现的 ActionSheet 的色调

ios - WKContentView 不符合关键 webSelectionAssistant 的键值编码

android - React-Native 通过教程 Facebook 获取 JSON 返回错误

ios - 负载测试苹果推送通知服务器应用程序

php - 如何将变量作为 POST 从 Cocoa-Touch 应用程序发送到我的 php 站点?

ios - swift 2 : Cannot invoke 'addAnnotation'

ios - 加密或保护存储在 iOS 应用程序的 NSDocumentsDirectory 中的文件

swift - StringInterpolationSegment 有什么作用? ( swift )

webkit - CSS 字体大小和 <img> 标签