Высота UITextView в соответствии с содержимым неверна в iOS 9

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

#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, есть некоторые изменения, связанные с автоматическим макетом.

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


person Rohit    schedule 25.09.2015    source источник


Ответы (2)


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

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

person digthewells    schedule 03.11.2015
comment
мой sizeTofit() не работал, потому что была включена прокрутка, спасибо! очень полезно. - person MD Singh; 03.12.2015

contentSize не заслуживает доверия, поскольку он обновляется до следующего цикла выполнения. Вы должны использовать "sizeThatFits"

person LiangWang    schedule 29.12.2015