我应该在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/