如何在运行时更改AutoLayout约束。
我需要在运行时更改视图的坐标,所以我做了以下操作:
if ([OfferText length] != 0) {
cell.topContentView.translatesAutoresizingMaskIntoConstraints = YES;
CGRect newFrame = CGRectMake( 71, 4, [Util window_width]-71,50);
cell.topContentView.frame = newFrame;
}
在这样做时,我得到以下警告。是否可以在运行时更改自动布局约束。
(1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7fca729606a0 UIView:0x7fca7296c6e0.top == UITableViewCellContentView:0x7fca729712b0.topMargin + 2>",
"<NSAutoresizingMaskLayoutConstraint:0x7fca7286f620 h=--& v=--& UIView:0x7fca7296c6e0.midY == + 29>",
"<NSAutoresizingMaskLayoutConstraint:0x7fca7286f670 h=--& v=--& V:[UIView:0x7fca7296c6e0(50)]>",
"<NSAutoresizingMaskLayoutConstraint:0x7fca705c9770 h=--& v=--& 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UITableViewCellContentView:0x7fca729712b0] (Names: '|':CollectionBrandCell:0x7fca72968820 )>"
)
我使用以下代码找到我的解决方案:
tableviewcell的in .h 在我的情况下
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *constraintsTopContentView;
和在.m
if ([OfferText length] != 0) {
cell.constraintsTopContentView.constant=-4;
}
答案 0 :(得分:3)
如果要从Storyboard设置约束,请设置更改视图坐标所需约束的出口。 例如: 如果要更改某些视图XYZ的顶部空间,请执行以下操作:
选择该视图的顶部约束并在.h文件中输出。这将 看起来像这样。
@property(强,非原子)NSLayoutConstraint * XYZ'stopConstraint;
现在,当您需要以下时,请将此约束更改为常量 代码。
self.XYZ'stopConstraints.constant = youValue;
另外,请根据我的观点从代码中删除此行。
cell.topContentView.translatesAutoresizingMaskIntoConstraints = YES;
答案 1 :(得分:0)
为要更改的约束创建出口(类似于UI控件);然后更改它们的constant
属性。
您的警告是因为您使用cell.topContentView.translatesAutoresizingMaskIntoConstraints = YES;
而引起的。这将创建一些新的约束(NSAutoresizingMaskLayoutConstraint
)并导致与旧的冲突。