2015-10-07 2 views
0

У меня есть подкласс UIView (для борьбы с перетаскиванием), а с интерфейсом Build я добавил два подзаголовка: UIImageView и UILabel.Ограничения обновления подзонов после изменений кадра наблюдения

Оба имеют ограничения:

UIImageView границы соответствуют SuperView границы для того, чтобы заполнить все доступное пространство. UILabel центрирован по вертикали и по горизонтали.

Здесь вы можете увидеть три (фон супервина зеленый).

enter image description here

Моя проблема возникает, когда я анимировать изменение кадра в надтаблицы. Супервизор кажется прекрасным, но его подзаголовки сходят с ума.

Здесь вы можете увидеть его (игнорировать коричневый квадрат, из другой точки зрения)

enter image description here

Как вы можете видеть, подвиды «падение» из надтаблицы, несмотря я называю updateConstraints на каждом подвид.

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

Thanks

+0

Почему бы вам не удалить супервизор и установить фон UIImageView на зеленый? Затем используйте правильный контент для правильного размера изображения, см. Этот вопрос: http://stackoverflow.com/questions/4895272/difference-between-uiviewcontentmodescaleaspectfit-and-uiviewcontentmodescaletof –

+0

Я пробовал, но тогда я не мог установить UILabel как подпрограмма UIImageView. Кроме того, зеленый просто временно. – WedgeSparda

+1

Возможно ли, чтобы вы указали свой исходный код? Поведение, которое вы описываете, - это то, что ожидается. Несколько вещей, которые следует учитывать: вы получаете предупреждения во время работы в консоли? Если ограничения не могут быть решены, некоторые из них будут уничтожены, и вы будете предупреждены в журнале. '-updateConstraints' не нужно вызывать в подзаголовках, если вы на самом деле их не модифицируете. Это не кажется необходимым в вашем случае. Как вы управляете позиционированием перетаскиваемого представления? Если представление позиционируется с ограничениями, но затем вы изменяете фрейм, может возникнуть непредвиденное поведение. –

ответ

0

Благодаря комментариям я внесла некоторые изменения.

1) Измените супервизор (зеленый) с помощью UIImageView.

2) Удалите UILabel и используйте CATextLayer, чтобы поместить текст, используя this answer, чтобы центрировать текст по вертикали перед UIImageView.

И теперь он отлично работает. Спасибо за помощь.

Смежные вопросы