2017-02-07 11 views
1

Это мой код, чтобы сделать UILabel авторазмер:Swift ограничение ширина авторазмер этикетки

 gmatesLabel.topAnchor.constraint(equalTo: homeButton.bottomAnchor, constant: 5).isActive = true 
     gmatesLabel.trailingAnchor.constraint(equalTo: gmatesUniversitySeparatorView.leadingAnchor, constant: -20).isActive = true 
     gmatesLabel.heightAnchor.constraint(equalToConstant: 40).isActive = true 
//  gmatesLabel.widthAnchor.constraint(equalTo: gmatesLabel.widthAnchor, multiplier: 0.5) 
     gmatesLabel.setContentCompressionResistancePriority(UILayoutPriorityRequired, for: .horizontal) 

Также я попробовал этот код:

gmatesLabel.widthAnchor.constraint(equalTo: gmatesLabel.widthAnchor, multiplier: 0.5, constant: 150).isActive = true 

Но проблема этикетки всегда термоусаживаемые, что сделал я пропустили здесь?

Update Я добавил leadingAnchor

gmatesLabel.heightAnchor.constraint(equalToConstant: 40).isActive = true 

И это функция, чтобы установить свою метку:

fileprivate func setCommonGmatesText(_ count: Int) { 

    let commonGmatesString = NSMutableAttributedString(string: "\(count)", attributes: [NSFontAttributeName : Font.boldFont22, NSForegroundColorAttributeName: Color.lightGray]) 
    commonGmatesString.append(NSAttributedString(string: "\(NSLocalizedString("commonGmates", comment: "How much common gmates we got"))", attributes: [NSFontAttributeName : Font.regularFont14, NSForegroundColorAttributeName: Color.lightGray])) 
    gmatesLabel.attributedText = commonGmatesString 
    gmatesLabel.sizeToFit() 
} 

enter image description here

+0

Почему там нет ведущего якоря? вы можете определить ведущий якорь и определить, например, больше 5. При необходимости ярлык будет расти до этого размера, если нет (потому что текст не достаточно длинный), он будет соответствовать только тексту – Ocunidee

+0

@Ocunidee Я не добавлял 'leadingAnchor', потому что мое представление будет вычеркнуто' top-right' и определения 'height-width' будет недостаточно, чтобы не добавлять другое ограничение. Использование раскадровки таким образом отлично работает, но программно я не знаю, почему это не сработало! – Chlebta

+0

Здесь вы хотите, чтобы ширина изменялась, поэтому вы не можете установить ширину, просто высоту. Чтобы убедиться, что метка не будет больше, чем надзор, вы должны установить ведущую привязку, которая равна или больше, чем что-то вроде 8pt (обычный размер поля). Вы измените размер метки. Может быть, скриншот поможет увидеть вашу точную проблему. – Ocunidee

ответ

1

Вы должны установить leadingAnchor на наклейке (например, больше или равно 8pt), чтобы метка не увеличивалась что это супервизор.

Вы также должны установить lineBreakMode:

yourLabel.lineBreakMode = .byWordWrapping