4

假设我有一个来自名为 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]];
4

1 回答 1

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

我没有测试过,所以如果我的顺序或语法错误,请告诉我,以便我修复它,但关键是你的字典可以是任意的。

于 2013-06-13T20:24:33.360 回答