我一直在尝试在swift 3中使用带有可视格式的autolayout并且它一直在崩溃。下面的代码基本上将一些UIImageView添加到滚动视图并使其可滚动。 但是,当我试图向滚动视图和imageview添加约束时,应用程序不断崩溃,代码在swift 2.3上正常工作
Sub Clear()
Range("B12:E18, G12:J18,B26:E32, C9").ClearContents
MsgBox ("Content cleared")
End Sub
所以我添加垂直约束的部分就是它崩溃的部分。
以下是添加页面的功能。
let page1 = createAndAddViewsWith("image1", middleTextLabel: "Welcome to TwisCode")
let page2 = createAndAddViewsWith("image2", middleTextLabel: "This is just a practice")
let page3 = createAndAddViewsWith("image3", middleTextLabel: "And the button will appear here")
pages = [page1, page2, page3]
print(pages)
let views = ["view": view, "page1": page1.view, "page2": page2.view, "page3": page3.view]
let verticalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:|[p1.view(==view)]|", options: NSLayoutFormatOptions(rawValue:0), metrics: nil, views: views)
NSLayoutConstraint.activate(verticalConstraints)
答案 0 :(得分:2)
看来问题是由视图数组的类型引起的。就我而言:
var nibview: UIView!
// ...
let views = ["nib": nibView] // Type: [String: UIView?]
投射它以确保值不是可选的似乎可以修复它(底部的一个将它转换为constraints.withVisualFormat期望的那样)。
let views: [String: UIView] = ["nib": nibView]
let views: [String: Any] = ["nib": nibView]
或者,您可以确保您的视图数组永远不会有可选视图。 (我必须明确展开一个隐式解包的可选项,我发现它很奇怪。)
let views = ["nib": nibView!]
这篇文章是我了解原因的地方:
Autolayout issue Xcode 8 [_SwiftValue nsli_superitem]