如何在自定义 UIView 中添加约束?

问题描述

我想给 UILabel 添加约束 我的自定义 UIView 类:

class LabelView: UIView {

    public var label: UILabel = UILabel()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.frame = frame
        prepareUI()
    }  
    func prepareUI() {     
        self.label.text = "SOME TEXT"
        self.label.sizeToFit()
        self.label.adjustsFontSizeToFitWidth = true
        self.label.textAlignment = .center
        self.addSubview(self.label)
        
        self.translatesAutoresizingMaskIntoConstraints = false
        self.label.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
        self.label.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
        self.label.widthAnchor.constraint(equalTo: self.widthAnchor,multiplier: 0.5).isActive = true
        self.label.heightAnchor.constraint(equalTo: self.heightAnchor,multiplier: 0.2).isActive = true
    }
}

运行后出现以下错误,UILabel位于UIView的左上角:

2021-02-13 02:32:26.698694+1000 SwiftHello[96793:1625524] [LayoutConstraints] 无法同时满足约束。 可能以下列表中的至少一项约束是您不想要的。 试试这个: (1) 查看每个约束并尝试找出您不期望的; (2) 找到添加不需要的约束或约束的代码并修复它。 (注意:如果您看到 NSAutoresizingMaskLayoutConstraints 不明白,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档) ( "<0x600000606c10 h="--&" v="--&" uilabel:0x142616930.minx="=" names:><0x600000606c60 h="--&" v="--&" uilabel:0x142616930.width="="><0x6000006061c0 uilabel:0x142616930.centerx="=" swifthello.labelview:0x1426167c0.centerx><0x600000606300 uilabel:0x142616930.width="=">

将尝试通过打破约束来恢复<0x6000006061c0 uilabel:0x142616930.centerx="=" swifthello.labelview:0x1426167c0.centerx>

在处创建一个符号断点以在调试器中捕获它。中列出的上的类别中的方法也可能有帮助。无法同时满足约束。可能以下列表中的至少一项约束是您不想要的。试试这个:查看每个约束并尝试找出您不期望的;找到添加不需要的约束或约束的代码并修复它。(注意:如果您看到不明白,请参阅属性的文档)<0x600000606cb0 h="--&" v="--&" uilabel:0x142616930.miny="=" names:><0x600000606d00 h="--&" v="--&" uilabel:0x142616930.height="="><0x6000006062b0 uilabel:0x142616930.centery="=" swifthello.labelview:0x1426167c0.centery><0x600000606350 uilabel:0x142616930.height="=">

将尝试通过打破约束来恢复<0x6000006062b0 uilabel:0x142616930.centery="=" swifthello.labelview:0x1426167c0.centery>

在处创建一个符号断点以在调试器中捕获它。中列出的上的类别中的方法也可能有帮助。无法同时满足约束。可能以下列表中的至少一项约束是您不想要的。试试这个:查看每个约束并尝试找出您不期望的;找到添加不需要的约束或约束的代码并修复它。(注意:如果您看到不明白,请参阅属性的文档)<0x600000606c60 h="--&" v="--&" uilabel:0x142616930.width="="><0x600000606300 uilabel:0x142616930.width="="><0x600000606940 swifthello.labelview:0x1426167c0.width="="><0x600000606da0 uiview:0x14260e930.width="=">

将尝试通过打破约束来恢复<0x600000606300 uilabel:0x142616930.width="=">

在处创建一个符号断点以在调试器中捕获它。中列出的上的类别中的方法也可能有帮助。无法同时满足约束。可能以下列表中的至少一项约束是您不想要的。试试这个:查看每个约束并尝试找出您不期望的;找到添加不需要的约束或约束的代码并修复它。(注意:如果您看到不明白,请参阅属性的文档)<0x600000606d00 h="--&" v="--&" uilabel:0x142616930.height="="><0x600000606350 uilabel:0x142616930.height="="><0x600000606990 swifthello.labelview:0x1426167c0.height="="><0x600000606d50 uiview:0x14260e930.height="=">

将尝试通过打破约束来恢复<0x600000606350 uilabel:0x142616930.height="=">

在处创建一个符号断点以在调试器中捕获它。中列出的上的类别中的方法也可能会有所帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)