我正在使用this answer中提供的代码来创建动态标签,它在大多数情况下都有效。但是每当标签文本的长度超过94个字符时,它就会被截断并添加省略号。
还有一个奇怪的事情是,如果我在字符串中添加更多字符,它们会被显示,但最后2行仍然被截断。
例如
字符串:
this is a very very long string
with lots of words to test the
dynamic bubble sizing one two three.
显示如下:
this is a very very long string
with lots of words to test the
dynamic bubble sizing one tw...
但是当我通过在标签中再次使用相同的句子来加倍字符串时,它会显示更多文本,但仍会截断它。
例如
字符串:
this is a very very long string
with lots of words to test the
dynamic bubble sizing one two
three. this is a very very long
string with lots of words to test
the dynamic bubble sizing one
two three.
显示如下:
this is a very very long string
with lots of words to test the
dynamic bubble sizing one two
three. this is a very very long
string with lots of words to tes...
这是我正在使用的代码。
NSString *temp = [NSString stringWithFormat:@"this is a very very long string with lots of words to test the dynamic bubble sizing one two three"];
captionLabel.text = temp;
//Calculate the expected size based on the font and linebreak mode of your label
CGSize maximumLabelSize = CGSizeMake(296,9999);
CGSize expectedLabelSize = [temp sizeWithFont:captionLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:captionLabel.lineBreakMode];
//adjust the label the the new height.
CGRect newFrame = captionLabel.frame;
newFrame.size.height = expectedLabelSize.height;
captionLabel.frame = newFrame;
希望有人有个主意,因为这让我摸不着头脑。
修改
使用captionLabel.frame.size.width代替硬编码296修复它,感谢@troolee,如果他/她选择创建答案,我会将其标记为正确。
答案 0 :(得分:1)
NSString * test=@"this is test this is test inthis is test ininthis is test inthis is test inthis is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel END";
testLabel.text = test;
testLabel.numberOfLines = 0; //will wrap text in new line
[testLabel sizeToFit];
[self.view addSubview:testLabel];
这肯定会对你有所帮助。
由于
答案 1 :(得分:1)
而不是captionLabel.lineBreakMode
,只需撰写UILineBreakModeWordWrap
即可。它应该工作。
答案 2 :(得分:1)
我希望@troolee现在能够将他的评论作为答案,但是因为他不会发布答案并将其标记为正确所以我可以关闭这个问题。
使用captionLabel.frame.size.width而不是硬编码296修复它。
答案 3 :(得分:0)
尝试以下UILabel
类别。感谢创作者。
<强>的UILabel + VAlign.h 强>
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface UILabel (VAlign)
- (void) setVerticalAlignmentTopConstrainedToSize:(CGSize)size;
@end
<强>的UILabel + VAlign.h 强>
#import "UILabel+VAlign.h"
@implementation UILabel (VAlign)
- (void) setVerticalAlignmentTopConstrainedToSize:(CGSize)size
{
CGSize textSize = [self.text sizeWithFont:self.font
constrainedToSize:size
lineBreakMode:self.lineBreakMode];
CGRect textRect = CGRectMake(self.frame.origin.x,
self.frame.origin.y,
self.frame.size.width,
textSize.height);
[self setFrame:textRect];
[self setNeedsDisplay];
}
@end