将实例变量与 NSLayoutConstraint 的视觉格式一起使用是不是有最佳实践?
Posted
技术标签:
【中文标题】将实例变量与 NSLayoutConstraint 的视觉格式一起使用是不是有最佳实践?【英文标题】:Is there a best practice for using instance variables with NSLayoutConstraint's Visual Format?将实例变量与 NSLayoutConstraint 的视觉格式一起使用是否有最佳实践? 【发布时间】:2013-06-13 18:55:31 【问题描述】:假设我有一个来自名为 label 的超类的实例变量,并且我想使用可视格式设置自动布局约束。如果我尝试在格式字符串中使用 self.label,则会出现解析错误,并且我无法从子类访问 _label。当前有效的解决方法如下,但看起来有点难看。有没有更好的办法?
UILabel *label = self.label;
NSDictionary *views = NSDictionaryOfVariableBindings(label, _textField);
[self.contentView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label(==_textField)][_textField(==label)]-|"
options:NSLayoutFormatAlignAllCenterY
metrics:nil
views:views]];
【问题讨论】:
【参考方案1】:constraintsWIthVisualFormat
需要一个视图字典,但它不必来自NSDictionaryOfVariableBindings
例如:
UILabel *label = self.label;
NSDictionary *views = @@"label":self.label, @"_textField":_textField;
[self.contentView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label(==_textField)][_textField(==label)]-|"
options:NSLayoutFormatAlignAllCenterY
metrics:nil
views:views]];
我还没有测试过,所以如果我的顺序或语法错误,请告诉我,以便我修复它,但重点是你的字典可以是任意的。
【讨论】:
当你只有一个属性时,这是处理 VFL 的方法。如果有帮助,我已经详细地写过这个here。以上是关于将实例变量与 NSLayoutConstraint 的视觉格式一起使用是不是有最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSLayoutConstraint 实例化和设置 UIButton 子类的大小
NSInvalidUnarchiveOperationException:无法实例化名为 NSLayoutConstraint 的类
错误:NSInvalidUnarchiveOperationException:无法实例化名为 NSLayoutConstraint 的类