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

Posted

技术标签:

【中文标题】根据内容的 UITextView 高度在 iOS 9 中是错误的【英文标题】:UITextView height according to content is wrong in iOS 9 【发布时间】:2015-09-25 12:55:34 【问题描述】:

我以编程方式将视图动态添加到具有布局约束的滚动视图中,对于文本视图组件,我想根据 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 中给出了错误的高度。我查看了苹果文档以了解 iOS 9.0 的新版本,其中有一些与自动布局相关的更改。

感谢任何帮助。

【问题讨论】:

【参考方案1】:

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

iOS 8 在启用滚动设置为 NO 的情况下调整了高度,但如果启用滚动设置为 NO,iOS 9 似乎不会调整高度约束。我刚刚在我的所有文本视图上选中了故事板中的框,之后调整了所有内容。

【讨论】:

我的 sizeTofit() 不起作用,因为启用了滚动,谢谢!!很有帮助。【参考方案2】:

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

【讨论】:

以上是关于根据内容的 UITextView 高度在 iOS 9 中是错误的的主要内容,如果未能解决你的问题,请参考以下文章

UITextView 根据内容动态改变高度?

iOS 移除 UITextView 内容下方的额外空间

UITextView 和单元格根据 textview 的内容动态更新高度?

iOS UITextView sizeToFit 使 iPad 中内容文本的高度加倍

UITextView 内容在增加高度时改变位置

如何根据文字长度增加 UITextview 高度,如 whatsapp