首页 > 解决方案 > 在 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];
}

问题是调用该函数时容器顶部约束没有改变,出了什么问题?

标签: iosobjective-cxcodeconstraints

解决方案


如果您_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;
}

推荐阅读