2015-09-25 3 views
4

Я динамически добавляю представления в scrollview с ограничением компоновки. Для компонента текстового представления я хотел установить ограничение по высоте в соответствии с текстовым набором в текстовом виде, поэтому я создал класс, расширяющий UITextView. Внутри класса текстового вида я написал следующий код для добавления ограничения высоты.UITextView height в соответствии с содержимым неверно в iOS 9

#import "CETextView.h" 

@implementation CETextView 

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    if (!self.heightConstraint) 
    { 
     self.heightConstraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:100]; 
     [self addConstraint:self.heightConstraint]; 
    } 
    CGRect lRect = [self contentSizeRect]; 

    CGSize descriptionSize = lRect.size; 
    self.heightConstraint.constant = descriptionSize.height; 

} 

- (CGRect)contentSizeRect 
{ 
    NSTextContainer* textContainer = [self textContainer]; 
    NSLayoutManager* layoutManager = [self layoutManager]; 
    [layoutManager ensureLayoutForTextContainer: textContainer]; 
    CGRect lRect = CGRectMake(0, 0,320, 500); 
    lRect.size = self.contentSize; 
    lRect.size.height = lRect.size.height + 5; 
    return lRect; 
} 


@end 

Этот код дает правильную высоту в iOS 8.0, но дает неправильную высоту в iOS 9.0. Я проверил apple doc для новой версии iOS 9.0, есть некоторые изменения, связанные с автоматической компоновкой.

Любая помощь приветствуется.

ответ

2

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

iOS 8 изменил высоту только высочайшего размера, включив прокрутку в положение НЕТ, но, похоже, iOS 9 не изменит размер ограничения высоты, если разрешить прокрутку НЕТ. Я только что проверил поле в доске объявлений на всех моих текстовых представлениях, и после этого все изменилось.

+0

мой размерTofit() не работал, потому что прокрутка была включена, спасибо! очень полезно. –

1

contentSize не является надежным, так как он обновляется до следующей runloop. Вы должны использовать «sizeThatFits»