错误:线程 1:“无法设置未准备好约束的视图层次结构的布局。”使用自动布局时

Posted

技术标签:

【中文标题】错误:线程 1:“无法设置未准备好约束的视图层次结构的布局。”使用自动布局时【英文标题】:Error: Thread 1: "Impossible to set up layout with view hierarchy unprepared for constraint." when using auto layout 【发布时间】:2021-11-23 18:30:04 【问题描述】:

我的代码在下面,我不知道是什么导致了这个错误出现。有什么想法吗?

Thread 1: "Impossible to set up layout with view hierarchy unprepared for constraint."
import UIKit

class ViewController: UIViewController 

    override func viewDidLoad() 
        view.backgroundColor = .blue
        lbl1values()
    
    
    
    
    
    let lbl1 = UILabel()
    
    
    func lbl1values()
        lbl1.addConstraint(NSLayoutConstraint(item: lbl1,
                                              attribute: .leading,
                                              relatedBy: .equal,
                                              toItem: view,
                                              attribute: .trailing,
                                              multiplier: 1.0,
                                              constant: 8.0))
    
        lbl1.addConstraint(NSLayoutConstraint(item: lbl1,
                                              attribute: .top,
                                              relatedBy: .equal,
                                              toItem: view,
                                              attribute: .bottom,
                                              multiplier: 1.0,
                                              constant: -8.0))
        
        view.addSubview(lbl1)
    

我已经尝试在“viewDidLoad()”之外调用“lbl1values()”,但我得到了完全相同的错误。

【问题讨论】:

【参考方案1】:

这应该可以满足您的需要。在设置其约束之前,您需要先将视图添加为子视图。我在下面添加了一个清晰的示例。

您还应该在标签上设置translatesAutoresizingMaskIntoConstraints 属性,这意味着系统不会创建一组重复由视图的自动调整大小掩码指定的行为的约束。

private let label = UILabel(frame: CGRect())

override func viewDidLoad() 
    view.backgroundColor = .blue

    setUp(label: label)
    view.addSubview(label)

    setUpConstraints()


private func setUp(label: UILabel) 
    label.translatesAutoresizingMaskIntoConstraints = false


private func setUpConstraints() 
    NSLayoutConstraint.activate([
        label.topAnchor.constraint(equalTo: view.topAnchor),
        label.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8),
        label.trailingAnchor(equalTo: view.trailingAnchor, constant: -8),
        label.bottomAnchor.constraint(equalTo: view.bottomAnchor),
    ])

【讨论】:

感谢您的帮助。但是它确实运行以下错误:线程 1:“无法在视图上安装约束。约束是否从视图的子树外部引用某些内容?这是非法的。约束:<0x600003d98780 h:>

以上是关于错误:线程 1:“无法设置未准备好约束的视图层次结构的布局。”使用自动布局时的主要内容,如果未能解决你的问题,请参考以下文章

Python/Django 1.5 DatabaseWrapper 线程错误

线程 1:致命错误:索引超出范围

运行 3 个线程时出现分段错误

Xcode 线程 1 SIGABRT 上的 Firebase 通知错误

XCode 错误线程 1:信号 SIGABRT

SWIFT 线程 1:EXC 错误指令 XCODE IOS