更改NSAutoLayout只读属性
需求:最近写代码 遇到需要将xib中一个高度>=0 的约束 变为 = 0
思路:查看NSLayoutConstraint类定义时, 发现 relation属性,其值为一个枚举类型(小于等于、等于、大于等于),因此确定修改此值即可解决。
but: 但是这个属性readonly的,😂。
再Google发现可以创建分类进行修改次只读属性:
代码如下:
.h
@interface NSLayoutConstraint (z)
-
(instancetype)updateRelation:(NSLayoutRelation)relation;
@end
.m -
(instancetype)updateRelation:(NSLayoutRelation)relation{
[NSLayoutConstraint deactivateConstraints:[NSArray arrayWithObjects:self, nil]];
NSLayoutConstraint *newConstarint = [NSLayoutConstraint constraintWithItem:self.firstItem attribute:self.firstAttribute relatedBy:relation toItem:self.secondItem attribute:self.secondAttribute multiplier:self.multiplier constant:self.constant];
[newConstarint setPriority:self.priority];
newConstarint.shouldBeArchived = self.shouldBeArchived;
newConstarint.identifier = self.identifier;
newConstarint.active = true;
[NSLayoutConstraint activateConstraints:[NSArray arrayWithObjects:newConstarint, nil]];return newConstarint;
}
总结: 既然只能在创建约束时设置此属性, 那我就创建新的约束替代之。