首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在运行时更改标签约束?

如何在运行时更改标签约束?
EN

Stack Overflow用户
提问于 2013-10-31 21:01:27
回答 4查看 23.6K关注 0票数 18

我有一个表视图和一个单元格。单元格包含三个标签:标题标签和下面的两个标签。有时,我需要隐藏下面的两个标签,如果它们不包含数据,并将"Header label“的"Top space to container”更改为"Center Y to container“。当然,当两个标签包含数据时,还原约束。这是一个简单的演示项目的截图,只是为了展示这个想法:

UPDATE Max MacLeod答案指向正确方向。诀窍是当第一个和第二个标签被隐藏时,将标题标签向下推。因此,我们需要为第一个和第二个标签的容器视图设置底部空间,而不是为标题标签的容器视图创建顶部空间。隐藏/取消隐藏应该通过设置高度出口(第一个和第二个标签的高度约束)并将它们的常量值设置为零(以及在取消隐藏时设置回值)来完成。我还上传了source code example to Github

EN

Stack Overflow用户

发布于 2016-03-05 19:05:12

将想要隐藏的标签放入视图中,一旦所有内容都具有正确的布局约束,就向容器视图添加高度约束,并将约束连接到IBOutlet属性中。

确保您的属性为strong

在代码中,你只需要将常量设置为0并激活它,就可以隐藏内容,或者停用它来显示内容。这比搞乱常量值和保存-恢复它要好得多。之后别忘了调用layoutIfNeeded

代码语言:javascript
复制
@property (strong, nonatomic) IBOutlet UIView *myContainer;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *myContainerHeight; //should be strong!!

代码语言:javascript
复制
-(void) showContainer
{
    self.myContainerHeight.active = NO;
    self.myContainer.hidden = NO;
    [self.view layoutIfNeeded];
}
-(void) hideContainer
{
    self.myContainerHeight.active = YES;
    self.myContainerHeight.constant = 0.0f;
    self.myContainer.hidden = YES;
    [self.view layoutIfNeeded];
}

设置好后,您可以在IntefaceBuilder中通过将约束设置为0然后返回原始值来测试它。不要忘记检查其他约束优先级,这样隐藏时就不会有任何冲突。测试它的另一种方法是将其设置为0,并将优先级设置为0,但是,您不应忘记再次将其恢复为最高优先级。

票数 7
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19707229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档