У меня есть три горизонтально выровненных UIView
s в контейнере UIView
. Эти три вида должны охватывать всю ширину выше UIImageView
. Проблема, однако, заключается в том, что иногда следует показывать только один или два дочерних представления.Рассматривать константу NSLayoutConstraint как множитель?
Я создал свой вид иерархию как так:
Поскольку мнения ребенка устанавливается равной шириной первого ребенка (который всегда будет показан), я просто установить ширина первого дочернего элемента - это часть ширины UIImageView
. Поэтому, если нужно показать три вида ребенка, первый вид ребенка будет иметь множитель 1/3 ширины UIImageView
. Если нужно отобразить два представления для детей, множитель будет равен 1/2. Если только один, множитель будет равен 1.
Это казалось идеальным решением, однако свойство множителя читается только. Моя первая попытка решить это была путем создания трех разных NSLayoutConstraint
s, прикрепленных к первому детскому виду, все с другим множителем, из которых 2/3 из них отключены. Затем, во время выполнения, я бы включил соответствующую константу с соответствующим множителем, основанным на количестве просмотров, которые я хотел показать.
Это привело много некрасивых ошибок, и поэтому сделал свое второе решение:
var constraint = NSLayoutConstraint(item: color1, attribute:NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: imageView, attribute: NSLayoutAttribute.Width, multiplier: 1/2, constant: 0)
view.addConstraint(constraint)
Где я хотел бы добавить новое ограничение к просмотру на основе мультипликатора я хотел. Это, конечно, привело к ошибке:
When added to a view, the constraint's items must be descendants of that view (or the view itself). This will crash if the constraint needs to be resolved before the view hierarchy is assembled.
Мой вопрос, поэтому, если я могу лечить constant
свойство подобно multiplier
собственности. Однако мой страх в этом заключается в том, что если я установил constant
для ширины первого детского вида, он не обновил бы свою ширину, когда телефон вращается.
Есть ли лучшее решение для всего этого?
Ничего себе, извините за поздний отклик. Это хорошо работает, однако я не могу поместить представления в представление контейнера, которое не охватывает весь экран. Под этим я подразумеваю, что если я установил 'previousView' в пользовательское представление, у которого есть левое и правое ограничение для его родителя 20px, произойдет следующее: http://i.imgur.com/rV8ubou.png – Charlie