Как сделать высоту шкалы OHAttributedLabel с высотой содержимого? - PullRequest
4 голосов
/ 08 июля 2011

Я использую OHAttributedLabel под названием demoLbl для отображения текста с отформатированными областями. Эта метка размещена в Интерфейсном Разработчике и связана со свойством в моем ViewController. После установки атрибута attributetText для метки я хочу, чтобы весь текст отображался в метке.
Если я не изменяю размер метки, то текст обрезается в конце метки, поэтому остальная часть текста отсутствует.

Если я использую [demoLbl sizeToFit]; тогда высота надписи будет больше или меньше по высоте, чем у текста (около 10 точек, в зависимости от длины текста), что дает мне пустые области внизу моего обзора (после прокрутки) плюс ширина метки увеличивается на около 2 баллов.

Если я вычислю высоту исходного текста (NSString) перед тем, как поместить его в NSAttributedString и добавить его в свойство attributeText метки, то вычисленная высота будет слишком мала для установки в качестве высоты метки.

Есть ли какой-нибудь хак или трюк, который я могу применить, чтобы высота метки регулировалась в соответствии с высотой NSAttributedString?

PS: Если быть более точным, я хотел добавить OHAttributedLabel в качестве тега, но он мне пока не разрешен.

Ответы [ 3 ]

10 голосов
/ 22 августа 2011

Я автор OHattributedLabel.

Недавно я исправил некоторые вычисления моего размера. Пожалуйста, проверьте это, вероятно, это решит вашу проблему.

Я также добавил метод с именем sizeConstrainedToSize:fitRange: в NSAttributedString+Attributes.h, который возвращает CGSize данного NSAttributedString (точно так же, как работает sizeWithFont:constrainedToSize: UIKit, но для строк Attributed и CoreText, а не для простых строк UIKit) На самом деле sizeThatFits OHAttributedLabel: теперь вызывает этот метод сам.

1 голос
/ 02 сентября 2011

Я добавил этот код в реализацию класса 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

Спасибо, Оливье, за то, что поделился вашим кодом!

1 голос
/ 08 июля 2011

Вы можете увидеть, дает ли эта категория более надежный рост. https://gist.github.com/1071565

Использование

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