我使用名为demoLbl的OHAttributedLabel来显示带有格式化区域的文本。此标签使用Interface Builder进行布局,并连接到ViewController中的属性。将attributedText设置为标签后,我希望所有文本都显示在标签中 如果我没有调整标签的大小,那么文本会在标签的末尾被裁剪,因此缺少其他文本。
如果我使用[demoLbl sizeToFit];然后标签的高度大于或小于文本(大约10个点,随文本的长度而变化),因此在我的视图底部(滚动后)给我空白区域加上标签的宽度增加了大约2分。
如果我在将原始文本(NSString)放入NSAttributedString并将其添加到标签的attributedText属性之前计算其原始高度,那么计算出的高度太小而无法将其设置为标签的高度。
是否有可以应用的黑客或技巧,以便根据NSAttributedString的高度调整标签的高度?
PS:更具体一点,我想将OHAttributedLabel添加为标签,但我还不允许这样做。
答案 0 :(得分:10)
我是OHattributedLabel的作者。
我最近对我的大小计算做了一些修改。请查看它可能会解决您的问题。
我还在sizeConstrainedToSize:fitRange:
中添加了一个名为NSAttributedString+Attributes.h
的方法,该方法返回给定NSAttributedString的CGSize(与UIKit的sizeWithFont:constrainedToSize:
完全相同,但是对于Attributed字符串和CoreText而言不是普通的蜇UIKit)
实际上OHAttributedLabel的sizeThatFits:现在调用这个方法。
答案 1 :(得分:1)
您可以看到此类别是否为您提供更可靠的高度。 https://gist.github.com/1071565
<强>用法强>
attrLabel.frame.size.height = [attrLabel.attributedString boundingHeightForWidth:attrLabel.frame.size.width];
答案 2 :(得分:1)
我将此代码添加到OHAttributedLabel类的实现中:
// Toni Soler - 02/09/2011
// Overridden of the UILabel::sizeToFit method
- (void)sizeToFit
{
// Do not call the standard method of the UILabel class, this resizes the frame incorrectly
//[super sizeToFit];
CGSize constraint = CGSizeMake(self.frame.size.width, 20000.0f);
CGRect frame = self.frame;
frame.size = [self sizeThatFits:constraint];
[self setFrame:frame];
}
// End Toni Soler - 02/09/2011
感谢Olivier分享您的代码!