Autolayout попытается восстановиться, нарушив ограничение

Я хочу разместить метку в правом углу ее superView с 8pt в конце и 10pt снизу

Это мой код:

  let label = UILabel(frame: CGRectZero)
  label.text = "text goes here"
  label.textColor = UIColor.whiteColor()
  label.translatesAutoresizingMaskIntoConstraints = false
  label.numberOfLines = 0
  label.textAlignment = .Right
  label.backgroundColor = UIColor.blackColor()
  label.font = UIFont(name: "TheSans-Plain", size: 17)
  imageTitleContainer.addSubview(label)


    let label_constraint_H:Array = NSLayoutConstraint.constraintsWithVisualFormat("H:|-(>=8)-[label]-(8)-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["label":label])

    let label_constraint_V:Array = NSLayoutConstraint.constraintsWithVisualFormat("V:[label]-(10)-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["label":label])

    imageTitleContainer.addConstraints(label_constraint_H)
    imageTitleContainer.addConstraints(label_constraint_V)`

но я получаю Unable to simultaneously satisfy constraints в console

Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7ff55acf24c0 H:[UILabel:0x7ff55acf1af0'text goes here']-(8)-| (Names: '|':UIView:0x7ff55acbf430 )>

Примечание: 0x7ff55acbf430 — это мой imageTitleContainer в коде.

Обновление: другие ограничения: "<NSLayoutConstraint:0x7ff55accdc80 H:|-(0)-[UIView:0x7ff55acbf430] (Names: '|':UIView:0x7ff55acca080 )>", "<NSLayoutConstraint:0x7ff55accdcd0 H:[UIView:0x7ff55acbf430]-(0)-| (Names: '|':UIView:0x7ff55acca080 )>", "<NSLayoutConstraint:0x7ff55acf2450 H:|-(>=8)-[UILabel:0x7ff55acf1af0'text goes here'] (Names: '|':UIView:0x7ff55acbf430 )>", "<NSLayoutConstraint:0x7ff55acf24c0 H:[UILabel:0x7ff55acf1af0'text goes here']-(8)-| (Names: '|':UIView:0x7ff55acbf430 )>", "<NSLayoutConstraint:0x7ff55adb3830 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7ff55acca080(0)]>" )


person Bobj-C    schedule 21.12.2015    source источник
comment
Какие еще ограничения упоминаются в консоли? Должен быть список всех ограничений, которые должны быть применены.   -  person Jörn Buitink    schedule 21.12.2015
comment
@JörnBuitink Я обновил свой вопрос   -  person Bobj-C    schedule 21.12.2015
comment
это из-за конфликта в горизонтальных ограничениях, с одной стороны вы применяете >=8, а с другой стороны фиксируете ограничение. Удалите >=8 Ведущее ограничение, просто примените замыкающее ограничение -8- и, если требуется, установите соответствующую ширину.   -  person Dipen Panchasara    schedule 21.12.2015
comment
@DipenPanchasara, тогда, если текст длинный, ширина метки будет обходить ширину суперпросмотра   -  person Bobj-C    schedule 21.12.2015
comment
@Bobj-C в этом случае либо определите конкретную ширину, либо установите linebreakmode вашей метки. или примените ведущее ограничение также -8- к фиксированному размеру.   -  person Dipen Panchasara    schedule 21.12.2015
comment
@DipenPanchasara Что делать, если я хочу, чтобы метка расширялась по вертикали, чтобы показать весь ее текст?   -  person Bobj-C    schedule 21.12.2015


Ответы (1)


Попробуйте понизить приоритет для одного из ваших ограничений, например.

H:|-(>=8@999)-[label]-(8)-|

Это необходимо сделать, чтобы позволить UICollectionView выполнять свою работу по компоновке. Обратите внимание на ограничение нулевой ширины с именем UIView-Encapsulated-Layout-Width, которое нарушает ваш макет.

person Denys Stas    schedule 25.12.2015