2016-05-16 3 views
0

У меня есть два UIView, содержащийся в UIView. Эти подпункты имеют ограничения по вертикали. Их высота постоянна.Раскадровка: изменение расстояния относительно высоты обзора

Я хотел бы мои поля полностью исчезнуть, если оба ограничения высоты равны 0.

Если один из моего роста равно 0 Я хотел бы сохранить вертикальное расстояние всего лишь второй подвид в.

Как я могу это сделать?

Нормальная установка. Вертикальное расстояние между хорошо и высота отличается от 0

Высоты равна 0. Но я до сих пор имею вертикальные ограничения распорных. Мой контейнерный вид должен иметь также высоту 0

ответ

0

Ваш лучший выбор - изменить программные ограничения. Создайте IBOutlet для каждого ограничения и подключите их. Оттуда вы можете установить наблюдателя (используя метод addObserver:forKeyPath:options:context:) для высоты каждого ограничения и соответственно изменить ограничения вертикального интервала, если одна или обе высоты равны 0 (вы можете сделать это, переопределив метод observeValueForKeyPath:ofObject:change:context: в представлении контроллер, который обрабатывает эти представления).

Не забудьте удалить наблюдателей в один из методов очистки (deinit, если в Swift или dealloc в ObjC, ваши лучшие ставки) для контроллера вида.

+0

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

+0

Согласен, и это решение не масштабируемо. Думаю – Pete

0

Вы можете придать маржам равное ограничение по высоте, равное их супервину, но сделать множитель менее 1,0. Два других вида просто привязали бы все стороны к их родительскому и маркерному представлениям. Вы можете сделать все это в IB, и это сработает.

+0

Пробовал ваше решение. Если у меня высота супервизора 100, я должен дать каждому ограничению по краю постоянное значение 100, а затем дать им множитель (значение реального ограничения: высота)? – Pete

+0

Вам не нужно давать им равные ограничения по высоте для их супервизора. –

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