То, что я хочу сделать, это создавать новую UILabel программно каждый раз, когда в моем коде происходит определенное действие. Я знаю x, y и высоту, которые я хочу присвоить метке, но я не хочу назначать ей ширину. Я хочу ограничить стороны так, чтобы ширина UILabel равнялась ширине экрана, и чтобы ширина метки изменялась при переворачивании ориентации.
Я рассмотрел использование:
CGRect(x:, y:, width:, height:)
Однако, если бы я использовал это, мне пришлось бы задать ему ширину набора, поэтому я не думаю, что это сработает.
Я также пробовал использовать:
CGPoint(x:, y:)
Затем установка ведущих, конечных и высотных якорей, однако, это тоже не сработает, так как даже при компиляции я получаю сообщение об ошибке при попытке создать новую UILabel.
Я новичок в программировании на Swift, поэтому я не уверен, есть ли очевидное решение этой проблемы.
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)
])
Вы можете использовать следующий код для программного создания 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)
])
Похожие вопросы
Связанные вопросы
Новые вопросы
swift
Swift - это безопасный, быстрый и выразительный язык программирования общего назначения, разработанный Apple Inc. для своих платформ и Linux. Swift с открытым исходным кодом. Используйте тег только для вопросов о языковых функциях или необходимости кода в Swift. Используйте теги [ios], [ipados], [macos], [watch-os], [tvos], [cocoa-touch] и [cocoa] для (не зависящих от языка) вопросов о платформах или фреймворках.