2011-07-08 65 views
4

我使用名为demoLbl的OHAttributedLabel来显示格式化区域的文本。这个标签是用Interface Builder布局的,并且连接到ViewController中的一个属性。将attributesText设置为标签后,我希望所有文本都显示在标签中。
如果我没有调整标签的大小,那么文本会在标签的末尾被裁剪掉,因此文本的其余部分会丢失。如何使内容高度的OHAttributedLabel标度的高度?

如果我使用[demoLbl sizeToFit];那么标签的高度大于或小于文本的高度(大约10个点,随着文本长度而变化),因此在我的视图底部给出空白区域(滚动后),再加上标签的宽度增加约2分。

如果我把它在一个NSAttributedString和增加它的标签的attributedText属性之前计算原始文本(的NSString)的高度,然后计算高度为它设置为标签的高度来说太小了。

是否存在可以应用的黑客或诡计,以便标签的高度根据NSAttributedString的高度进行调整?

PS:为了更具体,我想添加OHAttributedLabel作为标签,但它不允许我。

回答

10

我OHattributedLabel的作者。

我最近对我的计算大小做了一些修正。请检查它可能会解决您的问题。

我也NSAttributedString+Attributes.h返回给定NSAttributedString的CGSize(以同样的方式UIKit中的sizeWithFont:constrainedToSize:作品,但归因字符串和CoreText,而不是普通的蜇伤的UIKit的) 其实OHAttributedLabel的sizeThatFits添加了一个名为sizeConstrainedToSize:fitRange:方法:调用此方法本身。

+0

不幸的是,我无法检查您的更改是否有效。我被迫放弃使用NSAttributedString来交换使用带有样式文本的UIWebView。可能在未来的某个项目中,我可以测试它。如果发生这种情况,我会联系你。 – TRD

1

你可以看看这个类别是否给你一个更可靠的高度。 https://gist.github.com/1071565

使用

attrLabel.frame.size.height = [attrLabel.attributedString boundingHeightForWidth:attrLabel.frame.size.width]; 
+0

看来,这个类别即将做我想做的。如果我打印出NSAttributedString的高度,它会向我显示一个可能正确的值,但如果将此高度分配给我的标签,它将不会接受它。它比以前更高,但不如显示文本所需的高。令人惊讶的是,打印标签的高度显示了NSAttributedString的分类和分配高度。不知道恐怖在哪里。 – TRD

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 

谢谢奥利维尔分享你的代码!