2016-11-22 2 views
2

У меня есть UILabel, который меняет текст. Он имеет фоновый цвет, который я хочу всегда иметь одинаковую ширину, но для ее высоты, если необходимо, чтобы соответствовать тексту. Кто-нибудь знает, как я могу это сделать?Программно фиксированная ширина, динамическая высота UILabel?

Вот что я пробовал:

label.numberOfLines = 0 
    label.center = self.view.center 
    label.textAlignment = .center 
    label.widthAnchor.constraint(equalToConstant: 50.0).isActive = true 
    label.sizeToFit() 
+0

Есть ли у вас какой-либо код? Было бы полезно посмотреть, что вы пробовали. – Wez

+1

извините, добавлено – MarksCode

+0

Вы инициализируете ярлык рамкой? – Wez

ответ

-1

Учитывая вы используете автоматическую раскладку и хотите прикрепить этикетку с тем выше его, вы можете установить верхний, оставил и права ограничения этого ярлыка, то установите UILabel «ы numberOfLines 0.

+0

Очень возможно использовать нижние ограничения с многострочным UILabel – Wez

+0

Также не похоже, что OP использует автозапуск. – Wez

+0

@Wezly в последнем редакторе выглядит так, что он пытается также с автоматической компоновкой –

0

Вы, вероятно, следует сделать некоторое чтение на autolayout и узнать, как структурировать свои взгляды с ним, Однако, от того, что я могу собрать это выглядит, как вы хотите, этикетка:

  • Будьте в центре экрана
  • имеют фиксированную ширину
  • Have цвет фона
  • расширить, чтобы соответствовать его содержание вертикально

let label = UILabel() 
label.translatesAutoresizingMaskIntoConstraints = false 
label.backgroundColor = UIColor.greenColor() 
label.numberOfLines = 0 
label.textAlignment = .Center 
label.text = "This is\nsome multiline\nlabel\nwith a background\n colour" 
self.view.addSubview(label) 

let width = NSLayoutConstraint(item: label, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 50) 
let centerX = NSLayoutConstraint(item: label, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0) 
let centerY = NSLayoutConstraint(item: label, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: 0) 

self.view.addConstraints([width, centerX, centerY]) 

Приведенный выше код производит зеленая метка, использующая автозапуск, есть screenshot here.

Использование numberOfLines = 0 гарантирует, что представление знает, что этикетка может расширяться, чтобы соответствовать ее содержимому.

Ограничения макета должны быть самообучающимися, если вы их читаете, мы устанавливаем ширину метки на 50, тогда мы устанавливаем, что центральные X и Y-образы равны представлению, в которое мы добавили метку.

Это вы, что вы после? - Если нет, вы можете обновить свой вопрос, чтобы включить образ макета того, что вы пытаетесь сделать.

Смежные вопросы