Swift 2.0中的constraintsWithVisualFormat

12

我在Swift 2.0中使用AutoLayout时遇到了奇怪的问题。

self.webView = WKWebView()
self.view.addSubview(self.webView!)

var viewBindingsDict: NSMutableDictionary = NSMutableDictionary()
viewBindingsDict.setValue(self.webView, forKey: "webView")

self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[webView]|", options: 0, metrics: nil, views: viewBindingsDict))

self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[webView]|", options: 0, metrics: nil, views: viewBindingsDict))

我收到错误消息:

'String' is not convertible to 'StringLiteralConvertible'

"H:|[webView]|""V:|[webView]|"的含义我不确定是否漏掉了什么。

更新: 来自playground的截图


你尝试使用普通的Dictionary而不是NSMutableDictionary了吗?像这样 let viewBindingsDict = ["webView": self.webView!] - Michal
此外,我认为addConstraints可能不喜欢NSMutableDictionary中的webView是可选的这一事实。 - Michal
Michal,我已经尝试使用字典并得到了相同的结果。看一下截图,Xcode指向“H: | [webView] |”作为问题所在。 - iPera
1个回答

23

你应该将你的 viewBindigsDict 更改为

var viewBindingsDict = [String: AnyObject]()
viewBindingsDict["webView"] = webView

如评论中所建议,以及格式选项中所示,您不能使用0,而应该使用:

view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[webView]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: viewBindingsDict))
更简单的方法如@MartinR所建议的:
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[webView]|", options: [], metrics: nil, views: viewBindingsDict))

3
或者只写成 options: [],类似于(例如)https://dev59.com/Yl0a5IYBdhLWcg3wD08e#30769477。 - Martin R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接