Как я могу использовать SnapKit для достижения этой цели? - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу вот так: enter image description here

Вот мой код:

    let label1 = UILabel()
    let label2 = UILabel()
    label1.textColor = .white
    label1.backgroundColor = .red
    view.addSubview(label1)
    label1.snp.makeConstraints { (m) in
        m.left.equalToSuperview().offset(100)
        m.top.equalToSuperview().offset(100)
    }
    view.addSubview(label2)
    label2.snp.makeConstraints { (m) in
        m.left.equalTo(label1.snp.right)
        m.top.equalToSuperview().offset(100)
        m.right.equalToSuperview().offset(-100)
    }
    label1.text = "123456"
    label2.text = "789"

работает так: enter image description here

Почему он не выровнен по левому краю?Где я не прав?

1 Ответ

0 голосов
/ 18 сентября 2018

Удалить ваше право ограничение для 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 слева.

...