当前位置: 首页 > 知识库问答 >
问题:

使用IB添加一个标签的约束,以编程方式添加一个标签的约束

陆文斌
2023-03-14
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var labelA: UILabel!
    @IBOutlet weak var labelB: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        labelB.translatesAutoresizingMaskIntoConstraints = false
        //labelA.translatesAutoresizingMaskIntoConstraints = false

        labelB.topAnchor.constraintEqualToAnchor(
            labelA.topAnchor
        ).active = true

        labelB.centerXAnchor.constraintEqualToAnchor(
            view.centerXAnchor
        ).active = true
    }

}

产出:

2016-06-19 16:42:42.804 Test4[40792:232886] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<_UILayoutSupportConstraint:0x7fe8d2c13b20 V:[_UILayoutGuide:0x7fe8d2c1caa0(0)]>",
    "<_UILayoutSupportConstraint:0x7fe8d2c245a0 V:|-(0)-[_UILayoutGuide:0x7fe8d2c1caa0]   (Names: '|':UIView:0x7fe8d2c15790 )>",
    "<NSLayoutConstraint:0x7fe8d2c253e0 V:[_UILayoutGuide:0x7fe8d2c1caa0]-(111)-[UILabel:0x7fe8d2f169a0'LabelA']>",
    "<NSLayoutConstraint:0x7fe8d2c26e70 UILabel:0x7fe8d2c22a50'LabelB'.top == UILabel:0x7fe8d2f169a0'LabelA'.top>",
    "<NSIBPrototypingLayoutConstraint:0x7fe8d2c25a20 'IB auto generated at build time for view with fixed frame' V:|-(256)-[UILabel:0x7fe8d2c22a50'LabelB']   (Names: '|':UIView:0x7fe8d2c15790 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7fe8d2c253e0 V:[_UILayoutGuide:0x7fe8d2c1caa0]-(111)-[UILabel:0x7fe8d2f169a0'LabelA']>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2016-06-19 16:42:42.807 Test4[40792:232886] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x7fe8d2e24ba0 UILabel:0x7fe8d2c22a50'LabelB'.centerX == UIView:0x7fe8d2c15790.centerX>",
    "<NSIBPrototypingLayoutConstraint:0x7fe8d2c254d0 'IB auto generated at build time for view with fixed frame' H:|-(288)-[UILabel:0x7fe8d2c22a50'LabelB'](LTR)   (Names: '|':UIView:0x7fe8d2c15790 )>",
    "<NSIBPrototypingLayoutConstraint:0x7fe8d2c25a70 'IB auto generated at build time for view with fixed frame' H:[UILabel:0x7fe8d2c22a50'LabelB'(52.5)]>",
    "<NSLayoutConstraint:0x7fe8d2d8b020 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7fe8d2c15790(375)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7fe8d2e24ba0 UILabel:0x7fe8d2c22a50'LabelB'.centerX == UIView:0x7fe8d2c15790.centerX>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

共有1个答案

常翰
2023-03-14

嗯,我读到了一个关于从视图中删除所有约束的问题,添加以下代码成功地完成了我想要的任务:

override func viewDidLoad() {
    super.viewDidLoad()

    labelB.removeFromSuperview()  //<*****HERE
    view.addSubview(labelB)       //<*****HERE

    labelB.translatesAutoresizingMaskIntoConstraints = false
    //labelA.translatesAutoresizingMaskIntoConstraints = false

    labelB.topAnchor.constraintEqualToAnchor(
        labelA.topAnchor
    ).active = true

    labelB.centerXAnchor.constraintEqualToAnchor(
        view.centerXAnchor
    ).active = true
}

我还尝试了上面的代码,并注释掉了这一行:

labelB.translatesAutoresizingMaskIntoConstraints = false

它的工作方式是一样的。

 类似资料:
  • 问题内容: 有谁知道如何添加一个按钮来添加位于上一个创建的标签附近的新标签?如果不清楚我要说的是什么,只需查看浏览器中的标签和添加新标签的按钮即可;-)这正是我要管理的内容。 我正在使用MyFaces + PrimeFaces。 问题答案: 您可以用来显示基于某些bean集合的动态选项卡集。您可以将“添加”选项卡显示为选项卡集的最后一个选项卡。您甚至可以根据需要更改其样式。您可以使用挂钩标签更改监

  • 标签通常用于帮助记录图表设计进程。例如,解释一组表对象。若要创建一个新的标签,点击工具栏的 “标签”按钮,并点击画布的任意位置。 在画布中标签对象的弹出式菜单选项包括: 选项 描述 编辑 更改标签的内容。 剪切 从图表移除标签并放它在剪贴板。 复制 从图表复制标签到剪贴板。 粘贴 将剪贴板的内容贴到图表。 选择全部标签 在图表中选择全部标签。 删除 从图表中删除标签。 调整适合大小 自动调整标签的

  • 标签通常用于帮助记录图表设计进程。例如,解释一组表对象。若要创建一个新的标签,点击工具栏的 “标签”按钮,并点击画布的任意位置。 在画布中标签对象的弹出式菜单选项包括: 选项 描述 编辑 更改标签的内容。 剪切 从图表移除标签并放它在剪贴板。 复制 从图表复制标签到剪贴板。 粘贴 将剪贴板的内容贴到图表。 选择全部标签 在图表中选择全部标签。 删除 从图表中删除标签。 调整适合大小 自动调整标签的

  • 标签通常用于帮助记录图表设计进程。例如,解释一组表对象。若要创建一个新的标签,点击工具栏的 按钮,并点击画布的任意位置。 在画布中标签对象的弹出式菜单选项包括: 选项 描述 编辑 更改标签的内容。 剪切 从图表移除标签并放它在剪贴板。 复制 从图表复制标签到剪贴板。 粘贴 将剪贴板的内容贴到图表。 选择全部标签 在图表中选择全部标签。 删除 从图表中删除标签。 调整适合大小 自动调整标签的大小以适

  • 标签通常用于帮助记录图表设计进程。例如,解释一组表对象。若要创建一个新的标签,点击工具栏的 按钮,并点击画布的任意位置。 在画布中标签对象的弹出式菜单选项包括: 选项 描述 编辑 更改标签的内容。 剪切 从图表移除标签并放它在剪贴板。 复制 从图表复制标签到剪贴板。 粘贴 将剪贴板的内容贴到图表。 选择全部标签 在图表中选择全部标签。 删除 从图表中删除标签。 调整适合大小 自动调整标签的大小以适

  • 标签通常用于帮助记录图表设计进程。例如,解释一组表对象。若要创建一个新的标签,点击工具栏的 按钮,并点击画布的任意位置。 在画布中标签对象的弹出式菜单选项包括: 选项 描述 编辑 更改标签的内容。 剪切 从图表移除标签并放它在剪贴板。 复制 从图表复制标签到剪贴板。 粘贴 将剪贴板的内容贴到图表。 选择全部标签 在图表中选择全部标签。 删除 从图表中删除标签。 调整适合大小 自动调整标签的大小以适