是否有使用NSLayoutConstraint的可视化格式的实例变量的最佳实践?

时间:2013-06-13 18:55:32

标签: ios cocoa-touch cocoa layout autolayout

假设我有一个名为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 个答案:

答案 0 :(得分:9)

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]];

我没有测试过,所以请告诉我,如果我的订单或语法错误,我可以解决它,但关键是你的字典可以是任意的。