根据内容的UITextView高度在iOS 9中是错误的

时间:2015-09-25 12:55:35

标签: ios objective-c iphone ios9 ios9.1

我通过编程方式动态地将视图添加到具有布局约束的scrollview中。对于文本视图组件,我想根据textview中设置的文本设置高度约束,所以我创建了扩展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中提供了错误的高度。我查了苹果doc for iOS 9.0的新版本,有一些与汽车布局有关的变化。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

不确定你是否解决了这个问题,但是我把头撞到了墙上几个小时,直到我确定为我试图调整大小的UITextViews启用了滚动设置为YES。不确定这是否能解决您的问题,似乎略有不同。

iOS 8调整了高度,启用滚动设置为NO,但是如果启用滚动为NO,则iOS 9将不会调整高度约束。我刚刚在所有文本视图中检查了故事板中的方框,之后重新调整了所有内容。

答案 1 :(得分:1)

contentSize不可信,因为它会更新到下一个runloop。你应该使用“sizeThatFits”