UIImageView исчезает, когда применяется ограничение соотношения сторон

Xcode 9.3, MacBook Pro под управлением ОС 10.13.4

Когда я добавляю ограничение соотношения сторон к UIView в IB, представление не отображается в симуляторе. Пытаясь выяснить, куда он делся, я записал соответствующие координаты кадра с отсутствующим ограничением, а затем с его наличием. Координаты кажутся идентичными, но см. скриншоты для различия.

Без ограничений:

self.view.center = (207.0, 368.0)
self.thumbView.center = (93.0, 207.5)
self.viewFinder.center = (187.5, 163.5)
self.view.frame = (0.0, 0.0, 414.0, 736.0)
self.thumbView.frame = (30.0, 174.0, 126.0, 67.0)
self.viewFinder.frame = (16.0, 75.0, 343.0, 177.0)

Только с ограничениями соотношения сторон:

self.view.center = (207.0, 368.0)
self.thumbView.center = (93.0, 207.5)
self.viewFinder.center = (187.5, 163.5)
self.view.frame = (0.0, 0.0, 414.0, 736.0)
self.thumbView.frame = (30.0, 174.0, 126.0, 67.0)
self.viewFinder.frame = (16.0, 75.0, 343.0, 177.0)

Конечно, будем признательны за помощь, если у вас есть идеи!

Вот снимок сцены в IB. Большой UIImageView — это viewFinder, маленький — thumbView:

введите здесь описание изображения

Вот как это выглядит без ограничений:

введите здесь описание изображения

А вот как это выглядит после добавления ограничения соотношения сторон:

введите здесь описание изображения

ИЗМЕНИТЬ 1

Согласно комментарию @Anton ниже, я добавил ограничения близости снизу и по бокам от viewFinder до thumbView. Однако это не дало никаких изменений — я по-прежнему получаю координаты, указывающие на присутствие thumbView, но он остается невидимым.


person rattletrap99    schedule 30.06.2018    source источник
comment
Вы устанавливаете эти ограничения в коде или в построителе интерфейса? Если первый - то покажите пожалуйста код. В противном случае - проверьте, нет ли предупреждений/ошибок в конструкторе интерфейсов.   -  person Anton Filimonov    schedule 01.07.2018


Ответы (1)


Краткий ответ: попробуйте также добавить ограничения для положения x и y в виде миниатюры (например, выровняйте его края leading и bottom по viewFinder). Вы можете получить те же кадры только потому, что вы проверяете их до того, как автомакет выполнит свою работу (например, в viewDidLoad). Также установите какое-либо изображение для этого представления изображения или установите ограничение для одного из размеров (без такого ограничения автомакет пытается использовать внутренний размер, который зависит от содержимого для UIImageView). Также после этого вы должны проверить построитель интерфейсов на наличие других ошибок, потому что это, скорее всего, потребует установки ограничений для представлений, ваш thumbView зависит от

Если у вас действительно есть только одно ограничение для просмотра большого пальца и его ограничение соотношения сторон, вы, вероятно, получите ошибку в построителе интерфейса, которая говорит вам, что вы должны установить ограничения для координат x и y этого представления. Без таких ограничений вы получите неоднозначный макет, а это означает, что существует множество вариантов того, как установить положение вашего представления.

Хотя ограничений нет вообще, система переводит frame и autoresizing mask вида в ограничения, чтобы вы получили действительный набор ограничений для установки положения и размера вида, поэтому вид виден. Поскольку вы добавляете какие-либо ограничения для представления, вы должны добавить достаточно ограничений, чтобы четко определить положение и размер этого представления с помощью этих ограничений.

person Anton Filimonov    schedule 30.06.2018
comment
Большое спасибо, Антон. Однако это ничего не изменило. Пожалуйста, смотрите мое редактирование внизу вопроса. - person rattletrap99; 01.07.2018
comment
@ rattletrap99 посмотрите мое редактирование - только соотношения сторон недостаточно, чтобы установить ненулевой размер. надеюсь, это поможет - person Anton Filimonov; 01.07.2018
comment
Я собираюсь попробовать довольно серьезный пересмотр своих ограничений и сообщу позже. Спасибо! - person rattletrap99; 01.07.2018