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

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

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

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

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

CGPoint(x:, y:)

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

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

1
Ken 30 Май 2019 в 13:32

2 ответа

Лучший ответ

Как вы сказали, у нас уже есть 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
PGDev 30 Май 2019 в 11:23

Вы можете использовать следующий код для программного создания 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)
])
2
atalayasa 30 Май 2019 в 11:00