UILabel truncate tail and skip not complete word

前端 未结 3 1266
后悔当初
后悔当初 2021-01-05 09:40

I have a single line UILabel. It has width = screen width and the content now is (the content of UILabel can change)

You hav

3条回答
  •  轮回少年
    2021-01-05 10:08

    You can do something like this:

    let labelWidth = CGRectGetWidth(label.bounds)
    
        let str = "You will have 30 seconds till you give us a good impression" as NSString
        let words = str.componentsSeparatedByString(" ")
    
        var newStr = "" as NSString
    
        for word in words{
    
            let statement = "\(newStr) \(word) ..." as NSString
            let size = statement.sizeWithAttributes([NSFontAttributeName:label.font])
            if size.width < labelWidth {
                newStr = "\(newStr) \(word)"
            }
            else{
               break
            }
        }
    
        newStr = newStr.stringByAppendingString(" ...")
    
        self.label.text = newStr as String
    

    Idea is: we split words and try check the width while appending from the beginning + the string "..." till we found the a word that will exceed the size, in the case we stop and use this new string

提交回复
热议问题