ios - 在 Objective-C 中改变约束
问题描述
我在以下位置使用它设置了容器的顶部约束viewDidLoad
:
[[NSLayoutConstraint constraintWithItem:_container attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant: 0.00]setActive:true];
但是然后我想在出现按钮时更改这些约束,这就是那个功能
-(void)didConnect{
[[self connectToKestrelButton] setHidden:NO];
[[self cancelButton] setHidden:YES];
[[NSLayoutConstraint constraintWithItem:_container attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant: 60.00]setActive:true];
}
但是当这个函数被调用时,约束更新
-(void)didDisconnect{
[[self connectToKestrelButton] setHidden:YES];
[[self cancelButton] setHidden:YES];
[[NSLayoutConstraint constraintWithItem:_container attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant: 0.00]setActive:true];
}
问题是调用该函数时容器顶部约束没有改变,出了什么问题?
解决方案
如果您_container
在 Storyboard 中创建并为其提供了约束,那么您的代码正在添加额外的约束(我希望您在调试控制台中收到警告/错误消息)。
相反,从 Storyboard 创建IBOutlet
到 的顶部约束的连接_container
,例如:
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *containerTopConstraint;
然后,在viewDidLoad()
:
_containerTopConstraint.constant = 0.0;
而且,当您想更改它时,只需更改常量:
-(void)didConnect{
[[self connectToKestrelButton] setHidden:NO];
[[self cancelButton] setHidden:YES];
_containerTopConstraint.constant = 60.0;
}
-(void)didDisconnect{
[[self connectToKestrelButton] setHidden:YES];
[[self cancelButton] setHidden:YES];
_containerTopConstraint.constant = 0.0;
}
推荐阅读
- telegram - 使用电报中的内联按钮转移控制(机器人)
- ios - Xcode 错误:无法解析 IPHONEOS_DEPLOYMENT_TARGET:无法解析版本组件来自:'0
- python - 模块“张量流”没有属性“日志”
- wso2 - 将文本消息转换为 o Siddhi 事件时出现 WSO2 错误
- ios - 在顶层 UITableViewController 上创建 UIButton,就像 AirBnB
- java - 在从 Handler postDelayed 的 Internet 替代方案中获取数据时保持 UI 响应
- sql - 将 Varchar 转换为十进制
- sql-server - SQL Server 比较小数点后的数字
- javascript - 如何根据按钮的值在一个按钮中调用两个函数而不是同一次单击?
- redis - 如何在redis中导出/导入带有模式的键?