如何在Swift 3.0中使用Visual格式设置Autolayout约束

时间:2016-09-15 05:54:28

标签: ios swift

我一直在尝试在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)

1 个答案:

答案 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]