2015-11-24 3 views
0

У меня есть UIImageView в моем приложении для фотографий, который меняет размер на основе импортированного изображения. Размер создается динамически, а затем позиционируется программно в центре экрана без использования автоматической компоновки.Отключение автоматической компоновки для одного UIImageView

Теперь, чтобы сделать это, я использовал

self.imageViewCanvas.translatesAutoresizingMaskIntoConstraints = YES; 
[self.imageViewCanvas setFrame:CGRectMake(0, 0, screenWidth, screenHeight)]; 

отключить ограничения. Проблема в том, что всякий раз, когда я загружаю приложение, я получаю длинное предупреждающее сообщение, которое содержит следующее:

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

Есть ли способ отключить это конкретное предупреждение или я могу каким-то образом изменить код, чтобы избежать его?

Благодаря

+1

Является ли 'imageViewCanvas' создан в раскадровке? Если это так, у него есть ограничения, загруженные из раскадровки. Вы должны избавиться от этих ограничений. –

+0

Какие ограничения у вас предоставили для просмотра изображений? –

+0

Нет. Я не использую раскадровки, вместо этого использую XIB. У меня просто есть UIImageVIew на UIView, и насколько мне известно, никаких ограничений нет. – ORStudios

ответ

1

Для раскадровки или СИБ с автоматической компоновки включена, Xcode обеспечит ограничения, которые отсутствуют. Это происходит во время сборки. Если вы посмотрите на инспектора размера для представления, к которому вы не добавили каких-либо ограничений, вы увидите сообщение о ограничениях добавления Xcode для вас. Итак, в основном, независимо от того, что вы делаете, изображение будет ограничено.

Если вы установили translatesAutoresizingMaskIntoConstraints в true, это будет противоречить автоматически заданным ограничениям. Вы можете удалить/отключить эти ограничения, но трудно получить ссылки на них.

Ваши варианты:

  • Использование автоматической компоновки для размещения вида изображения. Легко выполнить то, что вы хотите.
  • Отключите автоматическую компоновку для всего NIB, поэтому ограничений не будет, и по умолчанию будет translatesAutoresizingMaskIntoConstraints.
  • Добавьте достаточные ограничения для себя в NIB, но отметьте их, которые нужно удалить во время сборки в инспекторе атрибутов или размеров. Это сигнализирует Xcode, что вы хотите взять на себя и не позволяет ему создавать свои собственные ограничения. (Обычно это делается, когда вы будете поставлять ограничения программным образом, но он также может работать, если вы просто включите translatesAutoresizingMaskIntoConstraints.)
  • Добавьте ограничения на свои собственные и настройте розетки для них. Деактивируйте их программно, прежде чем включать translatesAutoresizingMaskIntoConstraints.