Автомакет программно и UIImageView

Я пытаюсь разместить некоторые представления в коде. Во время выполнения мне нужно проверить, сколько сделок у нас есть, а затем соответствующим образом разместить код. У меня есть UILabel и UIImageView.

Я создаю объекты следующим образом:

UILabel *numberOfDealsLabel = [UILabel new];
[numberOfDealsLabel setFont:[UIFont fontWithName:@"HelveticaNeue-CondensedBold" size:50]];
numberOfDealsLabel.translatesAutoresizingMaskIntoConstraints = NO;
numberOfDealsLabel.textColor = [UIColor whiteColor];
[numberOfDealsLabel setTextAlignment:NSTextAlignmentCenter];
numberOfDealsLabel.numberOfLines = 1;
numberOfDealsLabel.text = [NSString stringWithFormat:@"%d", 2];
[numberOfDealsLabel sizeToFit];
numberOfDealsLabel.preferredMaxLayoutWidth = view.frame.size.width;
[view addSubview:numberOfDealsLabel];

UIImageView *dealsImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"deal"]];
[view addSubview:dealsImage];

Вид просто квадратный. Отсюда я пытаюсь добавить следующие ограничения, чтобы оба представления обнимали верхнюю часть представления и делили пространство по горизонтали.

[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[numberOfDealsLabel][dealsImage]|" options:nil metrics:nil views:views]];

[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[numberOfDealsLabel]|" options:nil metrics:nil views:views]];

[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[dealsImage]|" options:nil metrics:nil views:views]];

Я получаю следующую ошибку:

Возможно, по крайней мере одно из ограничений в следующем списке вам не нужно. Попробуйте следующее: (1) посмотрите на каждое ограничение и попытайтесь выяснить, чего вы не ожидаете; (2) найти код, который добавил нежелательное ограничение или ограничения, и исправить его. (Примечание. Если вы видите NSAutoresizingMaskLayoutConstraints, значение которых вам непонятно, обратитесь к документации по свойству UIView translatesAutoresizingMaskIntoConstraints)

Эта ошибка вызвана следующим ограничением:

[представление addConstraints:[NSLayoutConstraint ограниченияWithVisualFormat:@"H:|[numberOfDealsLabel][dealsImage]|" параметры:нет показателей:ноль просмотров:просмотров]];

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

Любые советы о том, что может быть причиной этой проблемы, были бы замечательными.




Ответы (1)


Судя по тому, как это выглядит, вы не вызываете «translatesAutoresizingMaskIntoConstraints = NO» в UIIamgeView, это должно хотя бы немного помочь, если не просто решить всю проблему.

Итак, это первое, что я бы сделал на вашем месте:

UIImageView *dealsImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"deal"]];
[dealsImage setTranslatesAutoresizingMaskIntoConstraints:FALSE]; //this is new code
[view addSubview:dealsImage];

От Apple:

Для представлений, поддерживающих Auto Layout, в большинстве случаев необходимо, чтобы для translatesAutoresizingMaskIntoConstraints было установлено значение NO.

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/AdoptingAutoLayout/AdoptingAutoLayout.html

person Larry Pickles    schedule 01.09.2015
comment
Это была точная проблема. Я установил его для UILabel, но не для imageView. Спасибо. - person pls; 01.09.2015