У меня есть две метки на одной строке. Мне нужно, чтобы вторая метка находилась вплотную к концу первой метки, но мне нужно убедиться, что вторая метка никогда не выходит за край экрана.
Таким образом, у меня есть левая привязка label1, выровненная слева от представления контейнера, и у меня есть левая привязка label2, ограниченная справа от label1, и правая привязка label2, ограниченная справа от контейнера.
Я хочу, чтобы label1 занимал ровно столько места, сколько ему нужно, а label2 занимал все остальное пространство. У меня ровно наоборот.
Так что мне нужна полная противоположность тому, что у меня есть здесь. Как мне это сделать?
Предоставление левой метке более высокого приоритета охвата контента должно помочь.
// In code
leftLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
Для дальнейшего чтения по этой теме я нашел это очень полезным
Пример детской площадки
//: A UIKit based Playground for presenting user interface
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
let view = UIView()
view.backgroundColor = .white
let leftLabel = UILabel()
leftLabel.text = "I am left"
leftLabel.backgroundColor = .orange
leftLabel.translatesAutoresizingMaskIntoConstraints = false
let rightLabel = UILabel()
rightLabel.text = "I am right"
rightLabel.backgroundColor = .yellow
rightLabel.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(leftLabel)
view.addSubview(rightLabel)
leftLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16).isActive = true
leftLabel.trailingAnchor.constraint(equalTo: rightLabel.leadingAnchor).isActive = true
leftLabel.topAnchor.constraint(equalTo: view.topAnchor, constant: 16).isActive = true
// This is the important part
leftLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
rightLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16).isActive = true
rightLabel.topAnchor.constraint(equalTo: leftLabel.topAnchor).isActive = true
self.view = view
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()
Это сработало прекрасно! Большое спасибо.
если я хочу добавить новую строку, что мне делать?
Отвечает ли это на ваш вопрос? Автоматический макет для динамического изменения ширины этикетки