【发布时间】:2021-09-11 15:20:41
【问题描述】:
我有一个作为 IBOutlet 连接到我的视图控制器的 UIView。我在 ViewDidLoad 方法中为该属性分配了一个 AnimationView 类实例,并使用 animationView.snp.makeConstraints { (make) in make.width.equalTo(view).multipliedBy(0.5) } 对其设置了约束
但是当我运行我的项目时,我收到一条错误消息,提示“约束或其锚点是否引用了不同视图层次结构中的项目?这是非法的”
我不知道为什么会收到此错误消息。谁能解释我做错了什么?
以及正文中的源代码:
import UIKit
import SnapKit
import Lottie
class ViewController: UIViewController {
@IBOutlet var myView: UIView!
override func viewDidLoad() {
myView = AnimationView()
myView.snp.makeConstraints { (make) in
make.width.equalTo(view).multipliedBy(0.5)
make.height.equalTo(view).multipliedBy(0.5)
}
}
}
更新:
我如何通过以下步骤解决此问题:
- 在 Storyboard 中创建一个占位符视图并将其作为 IBOutlet 添加到文件的所有者(确保在最右侧面板中键入
AnimationView作为其类)。 - 以编程方式创建动画视图并将其添加到其直接超级视图中。
- 为此动画视图提供与占位符视图相同的帧
animationView.frame = placeholderView.frame - 为占位符视图提供所需的约束 (
placeholderView.snp.makeConstraints { (make) in ... })
现在,您将通过编程创建的视图连接到 Storyboard 中的占位符视图。您的程序化视图将随着占位符视图的大小而改变大小。
【问题讨论】:
-
请将您的代码以文本形式发布。