需求:最近寫(xiě)代碼 遇到需要將xib中一個(gè)高度>=0 的約束 變?yōu)?= 0
思路:查看NSLayoutConstraint類定義時(shí), 發(fā)現(xiàn) relation屬性,其值為一個(gè)枚舉類型(小于等于、等于、大于等于),因此確定修改此值即可解決。
but: 但是這個(gè)屬性readonly的,??。
再Google發(fā)現(xiàn)可以創(chuàng)建分類進(jìn)行修改次只讀屬性:
代碼如下:
.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;
}
總結(jié): 既然只能在創(chuàng)建約束時(shí)設(shè)置此屬性, 那我就創(chuàng)建新的約束替代之。