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
You could know the size of label that is needed to display a particular NSString
instance. For example, you could use that one:
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode
Returns the size of the string if it were rendered with the specified constraints.
So what you want is to get CGSize
for a particular string and check if it is not larger then UILabel
size:
UILabel *label;
CGSize sizeNeeded = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, MAXFLOAT)];
if (sizeNeeded.height > label.bounds.size.height)
{
NSLog(@"String is truncated");
}
More useful NSString
methods you could find here: NSString UIKit Additions Reference
Ok, another way of doing what you want:
1) Create 2 UILabel
with the same properties but second one (label2
) will be with another one width
.
2) Set alpha
property of label2
to 0.0
in non-edit mode.
3) When edit mode begins make such animation:
// label1.alpha == 1.0, label2.alpha == 0.0
{[UIView animateWithDuration:0.5 animations:^{
label1.alpha = 0.0;
label2.alpha = 1.0;
}];
4) When edit mode ends:
{[UIView animateWithDuration:0.5 animations:^{
label1.alpha = 1.0;
label2.alpha = 0.0;
}];
That will give you the same result as in Mail.app