iOS 9中根据内容自适应的UITextView高度不正确

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新版本的文档,发现有一些与自动布局相关的更改。

非常感谢您的帮助。

2个回答

2

不确定您是否已经解决了这个问题,但我曾经为此苦思冥想了几个小时,直到我确信我正在尝试调整大小的UITextViews的启用滚动设置为YES。不确定这是否能解决您的问题,它似乎略有不同。

iOS 8使用启用滚动设置为NO也可以很好地调整大小,但是看起来iOS 9如果启用滚动为NO,则无法调整高度约束。我只需在所有文本视图上勾选story board中的复选框,然后一切都可以调整大小。


我的sizeTofit()没有起作用是因为滚动被启用了,谢谢!非常有帮助。 - MD Singh

1

由于contentSize会在下一个runloop之前更新,因此其不可靠。您应该使用"sizeThatFits"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接