Возможно, вы не хотите использовать какой-либо метод или расширение, которое вы используете в настоящее время для constrainToParentView
- или вам нужно отредактировать его, чтобы сохранить ссылки на ограничения.
Вот простойНапример, используя методы ограничения напрямую.Очень просто, а комментарии должны быть понятными.Он создает кнопку, центрирует ее по горизонтали, а затем переключается между ведущими и центральными ограничениями при каждом нажатии.
// SwapConstraintsViewController.h
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface SwapConstraintsViewController : UIViewController
@end
NS_ASSUME_NONNULL_END
и
// SwapConstraintsViewController.m
#import "SwapConstraintsViewController.h"
@interface SwapConstraintsViewController ()
@property (strong, nonatomic) UIButton *myButton;
@property (strong, nonatomic) NSLayoutConstraint *centerXLayoutConstraint;
@property (strong, nonatomic) NSLayoutConstraint *leadingLayoutConstraint;
@end
@implementation SwapConstraintsViewController
- (void)viewDidLoad {
[super viewDidLoad];
_myButton = [UIButton new];
_myButton.translatesAutoresizingMaskIntoConstraints = NO;
_myButton.backgroundColor = [UIColor redColor];
[_myButton setTitle:@"Test Button" forState:UIControlStateNormal];
[self.view addSubview:_myButton];
// constrain the button 100-pts from the top of the view
[_myButton.topAnchor constraintEqualToAnchor:self.view.topAnchor constant:100.0].active = YES;
// create centerX constraint
_centerXLayoutConstraint = [_myButton.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor constant:0.0];
// create leading constraint
_leadingLayoutConstraint = [_myButton.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor constant:24.0];
// activate centerX constraint
_centerXLayoutConstraint.active = YES;
[_myButton addTarget:self action:@selector(didTap:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)didTap:(id)sender {
if ([_centerXLayoutConstraint isActive]) {
// de-activate center first, then activate leading
_centerXLayoutConstraint.active = NO;
_leadingLayoutConstraint.active = YES;
} else {
// de-activate leading first, then activate center
_leadingLayoutConstraint.active = NO;
_centerXLayoutConstraint.active = YES;
}
}
@end