ios - 以编程方式添加约束时找不到 super View ?

标签 ios swift autolayout

提到这个问题Making a custom UIView subview that fills its superview在尝试以编程方式添加约束时。

我正在使用下面的代码以编程方式添加两个约束;但是,我收到一条错误消息,指出“无法解析约束格式”,因为相关 View 没有父 View 。

private func setupDownView(view: UIView) {
    let downView = try? DownView(frame: view.bounds, markdownString: "")
    downView!.translatesAutoresizingMaskIntoConstraints = false
    let viewsDict = ["view": downView!]
    downView!.addConstraint(NSLayoutConstraint.constraints(
        withVisualFormat: "V:|-0-[view]-0-|",
        options: [],
        metrics: nil,
        views: viewsDict)[0])
    downView!.addConstraint(NSLayoutConstraint.constraints(
        withVisualFormat: "H:|-0-[view]-0-|",
        options: [],
        metrics: nil,
        views: viewsDict)[0])
    view.addSubview(downView!);
}

enter image description here

view 是否在添加到其 subview 后自动成为父 View ?

我尝试在 addConstraint 之前通过 addSubview 设置约束之前添加 View ,但我收到错误“ View 层次结构未为约束准备”。

enter image description here

setupDownView在下面两个地方被调用,

@IBOutlet weak var cardTags: UIView! {didSet { setupDownView(view: cardTags)}}
@IBOutlet weak var cardContent: UIView! {
    didSet {
        setupDownView(view: cardContent)
        let tap = UILongPressGestureRecognizer(
            target: self,
            action: #selector(QuizViewController.tapDownHandler)
        )
        tap.minimumPressDuration = 0
        cardContent.addGestureRecognizer(tap)
    }
}

最佳答案

在层次结构中之后需要添加约束。所以 addSubview 调用必须在之前 addConstraint 调用。

还要确保 addConstraint 是在其父 View 上调用的,而不是 downView,并且 constraintsWithVisualFormat 返回的所有 约束:被添加,不仅仅是第一个。

private func setupDownView(view: UIView) {
    let downView = try? DownView(frame: view.bounds, markdownString: "")
    downView!.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(downView!);

    let viewsDict = ["view": downView!]
    view.addConstraints(NSLayoutConstraint.constraints(
        withVisualFormat: "V:|-0-[view]-0-|",
        options: [],
        metrics: nil,
        views: viewsDict))
    view.addConstraints(NSLayoutConstraint.constraints(
        withVisualFormat: "H:|-0-[view]-0-|",
        options: [],
        metrics: nil,
        views: viewsDict))

    view.layoutIfNeeded()
}

关于ios - 以编程方式添加约束时找不到 super View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186834/

相关文章:

ios - 如何以编程方式更改锚定样式约束?

ios - 在 iOS 中使用 AVPlayerItem 向后擦洗是否与向前擦洗一样流畅?

android - 自动连接已配对的 BT 设备

ios - 快速将 float 组写入 wav 音频文件

ios - 自动布局约束行为不正确?

objective-c - 向我添加到 UIWindow 的 View 添加约束时出错?

ios - 屏幕方向改变时背景图片为 "blinking"

ios - 带搜索的导航侧边栏

ios - 在应用程序委托(delegate)中导入 AWSCore header - Swift

swift - 如何使用 Xcode 7 Beta 通过快速代码将按钮放在中心?