4

テキストビューコンポーネントの場合、テキストビューに設定されたテキストに従って高さの制約を設定したかったので、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 では間違った高さを提供します。iOS 9.0 の新しいリリースについてアップルのドキュメントを確認しました。自動レイアウトに関連する変更がいくつかあります。

どんな助けでも大歓迎です。

4

2 に答える 2

1

次の実行ループまで更新されるため、contentSize は信頼できません。「sizeThatFits」を使用する必要があります

于 2015-12-29T01:45:37.907 に答える