【问题标题】:How to update constraint of a UILabel programatically如何以编程方式更新 UILabel 的约束
【发布时间】:2015-02-25 06:10:51
【问题描述】:

我正在 stroyboard 中创建一个 UILabel,其框架为 (15, 55, 250, 20)。 根据我的要求,我想通过编码将该标签框更改为(15, 10, 250, 20)。但对该标签没有影响。

所以我通过如下编码更新约束:

mylabel.frame = CGRectMake(15, 10, 250, 20);
[mylabel needsUpdateConstraints];

但它不起作用。请任何人帮助我。从过去 2 天开始,我就被困在这个问题上。

我正在通过情节提要添加这些约束

【问题讨论】:

  • 您正在设置框架,而不是更新约束。您是否在情节提要中添加了任何约束?
  • 是的,我正在情节提要中添加约束
  • 你添加了什么约束?
  • 我更新了我的问题,请检查。我添加了 constarint 的屏幕截图
  • 您说您想将其原点更改为 {15,10},但您显示的约束已经有视图。您的意思是要将其更改为 {15,55}?

标签: ios objective-c uilabel nslayoutconstraint


【解决方案1】:

更新框架不适用于 AutoLayout。而是创建和动画约束。

以下是创建NSLayoutConstraint 并将其添加到视图的方法:

var myLabelConstraint = NSLayoutConstraint (item: myLabel,
        attribute: NSLayoutAttribute.Top, // You can also choose Width, Height, Bottom, Leading, Trailing
        relatedBy: NSLayoutRelation.Equal,
        toItem: self.view
        attribute: NSLayoutAttribute.Top,
        multiplier: 1,
        constant: 10)
    self.view.addConstraint(myLabelConstraint)

如果您要为宽度和高度创建约束,请记住将toItem 更改为nil 并将attribute 更改为NSLayoutAttribute.NotAnAttribute

如果您想为约束设置动画,只需更改它的constant

myConstraint.constant = 15
self.view.layoutIfNeeded()

【讨论】:

    【解决方案2】:

    首先,您应该删除屏幕右边缘的一个约束 (45);你过度限制了你的视野。

    当您想更改在情节提要中创建的约束时,您应该为其创建一个 IBOutlet,并在代码中修改其常量值。由于您要更改 y 位置,因此对垂直间距约束(第 10 个)设置一个出口,我将在本示例中将其称为 yCon。你只需要这样做,

    self.yCon.constant = 55;
    [self.view layoutIfNeeded];
    

    【讨论】:

    • 我为约束 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *yCon; 创建了一个 IBOutlet .但是如何添加以及我必须在故事板中添加谁,请指导我
    • @SRNayak,您将其添加到您所做的垂直约束中。从左侧的场景列表而不是从画布中最容易做到这一点。
    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多