2013-06-13 1 views
4

Предположим, у меня есть переменная экземпляра из суперкласса с именем label, и я хочу установить ограничения автоматического макета, используя визуальный формат. Если я пытаюсь использовать self.label в строке формата, я получаю ошибки синтаксического анализа, и у меня нет доступа к _label из подкласса. Обходной путь, который в настоящее время работает, ниже, но он кажется уродливым. Есть ли способ лучше?Есть ли наилучшая практика для использования переменных экземпляра с визуальным форматом NSLayoutConstraint?

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

ответ

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

Я не проверял, что так, пожалуйста, дайте мне знать, если у меня есть заказ или синтаксис неправильный поэтому я могу это исправить, но суть в том, что ваш словарь может быть произвольным.

+0

Хорошая точка, TY. –

+0

Это способ борьбы с VFL, когда все, что у вас есть, является собственностью. Я написал об этом в деталях [здесь] (http://commandshift.co.uk/blog/2013/01/31/visual-format-language-for-autolayout/), если это поможет. – jrturton