Создание UILabel программно с ограничениями? - PullRequest
1 голос
/ 30 мая 2019

Итак, я хочу создать новую UILabel программно каждый раз, когда в моем коде происходит определенное действие.Я знаю x, y и высоту, которые я хочу присвоить метке, но я не хочу назначать ей ширину.Я хочу ограничить стороны так, чтобы ширина UILabel равнялась ширине экрана, и чтобы ширина метки изменялась при переворачивании ориентации.

Я рассмотрел использование:

CGRect(x:, y:, width:, height:)

Однако, если бы я использовал это, мне пришлось бы задать ему ширину набора, поэтому я не думаю, что это сработает.

Я также пытался использовать:

CGPoint(x:, y:)

Затем установить ведущие, конечные и высотные якоря, однако, это, похоже, тоже не работает, так как даже при компиляции я получаю ошибкукогда я пытаюсь создать новую UILabel.

Я новичок в программировании на Swift, поэтому я не уверен, есть ли очевидное решение этой проблемы.

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Как вы сказали, у нас уже есть x, y and height для label, т.е.

let x: CGFloat = 0
let y: CGFloat = 0
let height: CGFloat = 50

Давайте создадим label, используя вышеуказанные детали. Также установите width из label как UIScreen.main.bounds.width согласно вашему требованию.

let label = UILabel(frame: CGRect(x: x, y: y, width: UIScreen.main.bounds.width, height: height))
label.text = "This is a sample text"

Не забудьте установить label's translatesAutoresizingMaskIntoConstraints как false и добавить его к любому значению subview.

label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)

Добавьте соответствующий constraints из label с superview - top, bottom, leading, height. Вы обязательно можете добавить bottom constraint, если требуется. Это полностью зависит от вашего интерфейса.

Я добавляю label к top of the viewController's view.

NSLayoutConstraint.activate([
    label.heightAnchor.constraint(equalToConstant: height),
    view.topAnchor.constraint(equalTo: label.topAnchor),
    view.leadingAnchor.constraint(equalTo: label.leadingAnchor),
    view.trailingAnchor.constraint(equalTo: label.trailingAnchor)
    ])
2 голосов
/ 30 мая 2019

Вы можете использовать следующий код для программного создания UILabel.

private let label: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.numberOfLines = 0
    label.text = "Hello World"
    return label
}()

Затем внутри вашего viewDidLoad ()

addSubview(label)
NSLayoutConstraint.activate([
    topAnchor.constraint(equalTo: label.topAnchor),
    bottomAnchor.constraint(equalTo: label.bottomAnchor),
    leadingAnchor.constraint(equalTo: label.leadingAnchor),
    trailingAnchor.constraint(equalTo: label.trailingAnchor)
])
...