web-dev-qa-db-fra.com

Comment donner une hauteur dynamique à UILabel par programme dans Swift?

J'ai pris UIlabel qui sont générés dynamiquement en utilisant for loop, chaque type de texte diff est assigné en libellé, je veux donner à UILabel la taille dynamiquement en fonction du texte.

Y a-t-il une solution facile à faire dans Swift?

11
sss
let label:UILabel = UILabel(frame: CGRectMake(x, y, width, height))
label.numberOfLines = 4
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
let font = UIFont(name: "Helvetica", size: 20.0)
label.font = font
label.text = "Whatever you want the text enter here"
label.sizeToFit()

Si vous souhaitez définir numberOfLines en fonction du contenu du texte, indiquez le nombre maximal de lignes. C'est très important ici.

8
user3182143
    myLabel.text = "Your Label Text Here"

    myLabel.textAlignment = .Natural

    myLabel.numberOfLines = 0

    myLabel.sizeToFit()

    myLabel.frame = CGRectMake(myLabel.frame.Origin.x, myLabel.frame.Origin.y, 280, myLabel.frame.height)
4
Piyush Sanepara

obtenez une hauteur d'étiquette en fonction du texte, de la police et de la largeur que vous lui attribuez:

func rectForText(text: String, font: UIFont, maxSize: CGSize) -> CGSize {
        let attrString = NSAttributedString.init(string: text, attributes: [NSFontAttributeName:font])
        let rect = attrString.boundingRectWithSize(maxSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil)
        let size = CGSizeMake(rect.size.width, rect.size.height)
        return size
    }

let labelSize = rectForText("your text here", font: UIFont.systemFontOfSize(your font), maxSize: CGSizeMake(your label width,999))
let labelHeight = labelSize.height //here it is!
3
bluenowhere

La méthode d’extension Swift 4.1 pour calculer la hauteur de l’étiquette:

extension UILabel {

    func heightForLabel(text:String, font:UIFont, width:CGFloat) -> CGFloat {
        let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
        label.numberOfLines = 0
        label.lineBreakMode = NSLineBreakMode.byWordWrapping
        label.font = font
        label.text = text

        label.sizeToFit()
        return label.frame.height
    }

}

Référez-vous à: Ajustez la hauteur de UILabel au texte

1
user7718859
let label = UILabel()
label.backgroundColor = UIColor.greenColor()
label.text = "Hello,world.\n Just a test."
let font = UIFont.systemFontOfSize(17.0)
label.font = font
label.numberOfLines = 0;
let text = label.text! as NSString
let size = text.sizeWithAttributes([NSFontAttributeName:font])
label.frame = CGRectMake(0, 0, size.width, size.height)

Vous pouvez utiliser la disposition automatique dans le code. Voir Guide de mise en page automatique

1
NSDeveloper
let label:UILabel = UILabel()

                                        label.textColor=UIColor.black
                                        label.font = UIFont(name: "Halvetica", size: 17)
                                        label.numberOfLines = 1

                                        label.text = item.name
                                        label.sizeToFit()

                                        label.frame = CGRect(x: 5, y: imageView.frame.height+10, width: 50, height:label.frame.height)
1
D.l.Prasad
NSString(string: "hello this is a string").boundingRect(
        with: CGSize(width: width, height: .greatestFiniteMagnitude),
        options: .usesLineFragmentOrigin,
        attributes: [.font: self],
        context: nil).size

Utilisez cette méthode pour déterminer la taille de votre chaîne. Mettez la hauteur maximale et la largeur maximale dans CGSize(widhth,height) et il retournera un objet CGSize contenant la hauteur et la largeur. Utilisez-le selon votre scénario

0