以编程方式更新约束出口常量的最佳方法

时间:2017-03-20 12:36:04

标签: ios objective-c ios-autolayout

我在.xib文件中有一个宽度约束,我连接到一个插座,我想为iPhone 6更改其constant

在这一个之间:

//
//  MyViewController.m
//

#import "MyViewController.h"

@interface MyViewController ()

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *constraintViewWidth;

@property (nonatomic) BOOL isConstraintsUpdated;

@end

@implementation MyViewController

- (void)updateViewConstraints {

    if (!self.isConstraintsUpdated) {
        if (CGRectGetHeight([UIScreen mainScreen].bounds) == 667) {
            constraintViewWidth.constant = 60;
        }

        self.isConstraintsUpdated = YES;
    }

    [super updateViewConstraints];
}

@end

和这一个:

//
//  MyViewController.m
//

#import "MyViewController.h"

@interface MyViewController ()

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *constraintViewWidth;

@property (nonatomic) BOOL isLayoutLoaded;

@end

@implementation MyViewController

- (void)viewDidLayoutSubviews {

    [super viewDidLayoutSubviews];

    if (!self.isLayoutLoaded) {
        if (CGRectGetHeight([UIScreen mainScreen].bounds) == 667) {
            constraintViewWidth.constant = 60;
        }

        self.isLayoutLoaded = YES;
    }
}

@end

哪个是首选的?

我尝试使用第一个,但它不起作用,因为自定义常量被.xib文件中的那个覆盖,尽管在updateViewConstraints中更改它是最有意义的

第二个可以工作,但我不明白为什么我想在布局完成时更改约束。

0 个答案:

没有答案