从情节提要设置约束后如何立即修改约束?

Posted

技术标签:

【中文标题】从情节提要设置约束后如何立即修改约束?【英文标题】:How to modify constraints right after they are set from storyboard? 【发布时间】:2015-01-29 07:58:47 【问题描述】:

我需要知道如何在从情节提要或 nib 加载约束后修改它们。

例如,在故事板中,我横向放置了 5 个视图。在代码中,当视图控制器加载数据时,此视图的位置基于数据。那么有没有可以添加到控制器的方法?我认为 awakeFromNib 会起作用,但事实并非如此。或者也许我用错了。

谢谢你帮助我。

【问题讨论】:

【参考方案1】:

我以为是这个地方:initWithCoder

或者

数据进来后可以调用:

 [self setNeedsUpdateConstraints];

然后你需要实现

 - ( void ) updateConstraints

但您也可以只在代码中创建所有约束,然后只添加特定数据所需的约束。

我要做的是:(可能是代码拼写错误,但输入的是 xCode 补全;))

@interface ...
@property (assign, nonatomic) BOOL update;
@end

- ( void ) whatever 
    _update = YES;
    [self setNeedsUpdateConstraints];


- ( void ) updateConstraints 
    [super updateConstraints];

    if( _update ) 
        _update = NO;

       ....CONSTRAINTS...
    

【讨论】:

Init with coder 是在 Storyboard 中创建的视图的指定初始化程序。 (对于删除评论的人) initWithCoder 不行,我已经试过了。有一个方法layoutSubviews,但是这个一直被调用,我只需要第一次修改。 你不应该使用 layoutSubviews 而是使用我的第二种方式。 updateConstraints 是为您的问题而设计的。这样做一次,只需用 if 保护它。 if 语句是什么意思?所以我创建了一个类似于 initialUpdate 的 bool,它会在 updateConstraints 方法中告诉我,当这个 bool 为 YES 时,它应该更新,否则不应该更新。 更新答案@KlemenZagar 因为您只想在获得数据后进行约束(异步?)并且可以多次调用 updateConstraints

以上是关于从情节提要设置约束后如何立即修改约束?的主要内容,如果未能解决你的问题,请参考以下文章

修改已经使用自动布局布局的情节提要

如何使用情节提要在 Tableview Cell 中为 2 个标签和一个图像视图设置约束?

如何仅使用一个情节提要为所有 iPhone 设备设计自动布局约束?

如何删除情节提要或菜单上的约束

在代码中更改大小分类约束的常量,但它会恢复为情节提要值

如何在情节提要中的 UILabel 的右边缘添加前导约束?