我应该在updateConstraints方法中更新约束的哪一部分?
我应该更新与子类相关的所有约束吗?
通常,在我的UIView子类中,添加仅与该子类中定义的 subview 相关的约束数组。

@property(nonatomic, strong) NSArray *subclassConstraints;

- (void)updateConstraints {
 [self removeConstraints:self.subclassConstraints];
 self.subclassConstraints = [self createConstraints];
 [self addConstraints:self.subclassConstraints];
 [super updateConstraints];
}

因此,在我的约束,父类(super class)约束或子类约束之间不会有任何冲突。

问题是:我应该更新所有self.subclassConstraints吗?
或者我应该只更新一些操作后可能不正确的约束?

如果有一些 View 属性,并且有人可以重置它们或分配nil,我认为所有相关的约束都将是不正确的,因此我应该在每个 View 中更新该 View 的约束。- (void)updateConstraints调用。

f.e.
@property (nonatomic, strong) UIImageView *imageSubview;


- (void)setImageSubview:(UIImageView *)imageView {
    if (![_imageView isEqual:imageView]) {
        _imageView = imageView;
        [self setNeedUpdateConstraints];
    }
}

- (void)updateConstraints {
    [self removeConstraints:self.imageViewConstraints];
    self.imageViewConstraints = [self createImageViewConstraints];
    [self addConstraints:self.imageViewConstraints];
    [super updateConstraints];
}

那么我应该在updateConstraints方法中更新所有约束吗?
还是我应该只更新其中一些(例如imageViewConstraints)

最佳答案

最终,它将取决于如何使用自动布局来放置 View 以及在修改 subview 时哪些约束会导致冲突。每个案例的情况会有所不同。

始终要注意布局对于每个边缘情况的整体影响,而不仅仅是改变的单个 View 。有时像您的示例一样,仅需要更改 subview 的约束。但是,有时也需要更新整个布局的约束。

如果可以,仅更改使布局有效所需的约束总是更有效的,因为您将重用现有约束而不是创建新约束。通过更改,我并不一定意味着要破坏和重新创建约束。如果可以的话,只需更改使布局有效所需的约束的常数值即可。

关于ios - 实现updateConstraints的正确方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23240015/

10-11 16:14