Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UILabel truncate tail and skip not complete word

Tags:

ios

uilabel

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

You have 30 seconds to make an impression during an interview

Currently, my UILabel is truncated tail and the word "duration" is not complete

self.nameLabel.lineBreakMode = NSLineBreakByTruncatingTail;

What I want is I want my UILabel still truncating tail and only display complete word.
Like the image below

enter image description here

Any help or suggestion would be great appreciated.

like image 226
Linh Avatar asked May 24 '16 10:05

Linh


1 Answers

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

like image 62
Hossam Ghareeb Avatar answered Oct 17 '22 03:10

Hossam Ghareeb