I have a multi-line UILabel
(numberOfLines
= 0). It's width can change at runtime, and sometimes this leads to truncation and/or re-wrapping. Some examples illustrate this best:
Example 1: the reduction in width leads to a different line break point
Example 2: the reduction in width leads to truncation
Example 3: the reduction in width leads to both truncation and a different line break position
Example 4: the reduction in width does not have any effect on truncation or line break position
Since this change in formatting can be quite jarring, I intend to mask it behind some animation (probably a fade in/fade out). However, the first hurdle is identifying when I need to do this. I don't want to apply the animation whenever the label re-sizes - only when it will cause a change in either truncation or line break positions.
How might I test this? The test should return YES for example 1, 2, and 3, but NO for example 4.
Note: the resizing will never alter the number of lines in my example.
Note 2: if anyone has some better tags related to text formatting I'd love to know them - feel free to edit.
Note 3: if you are interested in seeing this behavior accomplished, try Apple's mail.app on the iPhone. When viewing the inbox, swipe an email and watch the summary line fade-in/out as it re-wraps and/or truncates (but not when it doesn't need to).
Swift 3 solution
You can count the number of lines after assigning the string and compare to the max number of lines of the label.
The answer above is using a depreciated method, so i thought the following code could be useful:
Use this method to find lable truncated in iOS 7.
You could know the size of label that is needed to display a particular
NSString
instance. For example, you could use that one:So what you want is to get
CGSize
for a particular string and check if it is not larger thenUILabel
size:More useful
NSString
methods you could find here: NSString UIKit Additions ReferenceOk, another way of doing what you want:
1) Create 2
UILabel
with the same properties but second one (label2
) will be with another onewidth
.2) Set
alpha
property oflabel2
to0.0
in non-edit mode.3) When edit mode begins make such animation:
4) When edit mode ends:
That will give you the same result as in Mail.app
For versions higher than iOS 7, you can check the following solutions: