2016-06-03 2 views
0

Я немного борюсь с визуальными ограничениями в своем приложении для iOS.Visual Constraints with Hidden Views

У меня есть четыре UIViews. Одна из них всегда «заголовок» или вид сверху, а остальные три очереди являются видимыми под ней, как показано ниже:

+-------------------+ 
| HeaderView  | 
+-------------------+ 
| View2|View3|View4 | 
+-------------------+ 

только один из View2, View3 или view4 видна в то время, и другие скрыты, когда они не используются.

Теперь, используя регулярные NSLayoutConstraints, я могу получить это работает очень хорошо:

  1. Все виды имеют ограничения для ведущих и хвостовых запас, чтобы соответствовать хост-супер-вид.
  2. HeaderView имеет TopMargin для соответствия супер-представлению хозяев.
  3. Все виды имеют ограничения на их высоту. HeaderView - 100, а View2, View3 и View4 - 25, 50 и 75 соответственно.
  4. View2, View3 и View4 имеют ограничения, которые устанавливают верхнюю часть, равную нижней части заголовка.
  5. (я не забочусь ни о каком нижней ограничивающей для View2, View3 или view4. - их высоты фиксированы, а пустое пространство под ними управляется в другом месте)

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

@"H:|-0-[HeaderView]-0-|" 
@"H:|-0-[View2]-0-|" 
@"H:|-0-[View3]-0-|" 
@"H:|-0-[View4]-0-|" 

Теперь, вертикальные ограничения, когда я попадаю в неприятности:

Я попытался следующее:

@"V:|-0-[HeaderView(100)]-0-[View2(25)]-0-[View3(50)]-0-[View4(75)]" 

И Я также попытался разделить это:

@"V:|-0-[HeaderView(100)-0-[View2(25)]" 
@"V:|-0-[HeaderView(100)-0-[View2(50)]" 
@"V:|-0-[HeaderView(100)-0-[View2(75)]" 

Проблема в том, что вертикальная компоновка никогда не бывает правильным - почти всегда, View2, View3 или View4 будут лежать прямо над HeaderView, а не ниже.

Любые предложения по очистке и исправлению моих вертикальных макетов?

ответ

1

Попробуйте, как это,

V:[HeaderView(100)]-[View1(25)] 
V:[HeaderView(100)]-[View2(50)] 
V:[HeaderView(100)]-[View3(75)] 

И убедитесь, что вы правильно настройки views параметр constraintsWithVisualFormat метода. Он должен быть super view вашего views, на котором вы устанавливаете ограничения, или должен быть вид, с которым связаны ваши ограничения.

Надеется, что это поможет :)

+1

(100 он не должен быть (100) дружище ??? –

+0

Да, это была опечатка !! спасибо за предложение .. :) – Lion

+0

еще один сомнения :) Arent вы все применения ограничение 25 30 75 height на том же представлении View2, когда требовалось применить его для View1, View2 и View 3 :) Я знаю, что это была его часть, но это неправильно, не так ли? Аффект в том, что высота View2 будет 75 где, так как другие высоты будут неявными, поэтому установлены на 0 :) –

0

MarcWan,

Там нет ничего плохого в ограничении я считаю, если это именно ограничение вы использовали вы пропустили «]» во всех ограничениях.

попробовать это,

@"V:|-0-[HeaderView(100)]-0-[View2(25)]-0-[View3(50)]-0-[View4(75)]" 
+0

nah, это была опечатка. это не сработало :( – MarcWan

+0

@marcwan: Вы написали HeaderView.translatesAutoresizingMaskIntoConstraints = false, View2.translatesAutoresizingMaskIntoConstraints = false, View3.translatesAutoresizingMaskIntoConstraints = false и, наконец, View4.translatesAutoresizingMaskIntoConstraints = false –

+0

Yah, приведенный выше ответ от @lion полностью сделал трюк. Я просто хочу поиграть с вашим ответом немного больше и посмотреть, смогу ли я снова вернуть его в одну строку^_ ^ – MarcWan