Ber*_*rgP 7 objective-c uiview ios nslayoutconstraint
我应该在updateConstraints方法中更新哪些部分约束?我应该更新与我的子类相关的所有约束吗?在我的UIView子类中,我通常添加仅与此子类中定义的子视图相关的约束数组.
@property(nonatomic, strong) NSArray *subclassConstraints;
- (void)updateConstraints {
[self removeConstraints:self.subclassConstraints];
self.subclassConstraints = [self createConstraints];
[self addConstraints:self.subclassConstraints];
[super updateConstraints];
}
Run Code Online (Sandbox Code Playgroud)
因此,我的约束,超类约束或子类约束之间不会发生任何冲突.
问题是:我应该更新所有self.subclassConstraints吗?或者我应该只更新一些操作后可能不正确的约束?
如果有一些视图属性,有些可以重置它们或分配nil,我认为所有相关的约束都是不正确的,所以我应该在每次- (void)updateConstraints
调用时更新该视图的约束
.
FE
@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];
}
Run Code Online (Sandbox Code Playgroud)
那么我应该在updateConstraints方法中更新所有约束吗?或者我应该只更新其中的一些(像imageViewConstraints)
小智 2
最终,这将取决于如何使用自动布局定位视图,以及修改子视图时哪些约束会导致冲突。它会根据具体情况而有所不同。
始终注意每个边缘情况的整体布局如何受到影响,而不仅仅是更改的单个视图。有时只有子视图的约束需要改变,就像你的例子一样。然而,有时整个布局的约束也需要更新。
如果可以的话,仅更改使布局有效所需的约束总是更有效,因为您重用现有约束而不是创建新约束。我所说的改变并不一定意味着只是破坏和重新创造限制。如果可以的话,只需更改使布局有效所需的约束常量值即可。