Удалить ваше право ограничение для label2
.
label2.snp.makeConstraints { (m) in
m.left.equalTo(label1.snp.right)
m.top.equalToSuperview().offset(100)
// m.right.equalToSuperview().offset(-100)
}
Ваш label2
был прикреплен к левому краю суперпредставления на расстоянии 100. Таким образом, поскольку label1
не имеет установленной ширины, он изменит размер , чтобы соответствовать правому ограничению label2
тем самым выполняя все установленные ограничения.
Если вы не можете удалить левое ограничение, тогда вам нужно получить ширину метки без каких-либо ограничений для текста. Вы можете получить это так. Например,
let label = UILabel()
label.text = "Blah"
let width = label.intrinsicContentSize.width
Теперь вы устанавливаете эту ширину с помощью snapKit равной ширине label1. и установите левое ограничение, меньшее или равное 100.
В качестве альтернативы и подход лучше . Вы также можете попробовать использовать одну метку с атрибутивным текстом. Так как вы знаете строку первой метки и второй метки, вы можете легко отформатировать ее с помощью NSAttributedString
, избегая головной боли ограничений для нескольких меток.
let string1 = NSAttributedString(string: "Your first string", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.backgroundColor: UIColor.red])
let string2 = NSAttributedString(string: "Your second string", attributes: [NSAttributedString.Key.foregroundColor: UIColor.black, NSAttributedString.Key.backgroundColor: UIColor.white])
var finalString: NSMutableAttributedString = NSMutableAttributedString()
finalString.append(string1)
finalString.append(string2)
Теперь установите якоря как 10 справа, сверху, -10 слева.