Objective c 使用AutoLayout将UITextView扩展到指定高度后重新启用它的滚动

Objective c 使用AutoLayout将UITextView扩展到指定高度后重新启用它的滚动,objective-c,ios8,xcode6,uitextview,ios-autolayout,Objective C,Ios8,Xcode6,Uitextview,Ios Autolayout,我知道有一些类似的职位,但他们似乎不适合我 我有一个uitextview,我希望其行为类似于Messeng应用程序 我使用自动布局和[textview SetScrolEnabled:NO]允许uitextview在键盘上方动态展开。当然,它会一直增长到屏幕顶部。当它停止生长时,您将看不到任何其他文本 我试图找到它在textViewDidChange中停止增长的高度,并调用[textView SetScrolEnabled:YES],但它在增长之前缩小了初始大小 当滚动达到一定高度或无法再增长时

我知道有一些类似的职位,但他们似乎不适合我

我有一个uitextview,我希望其行为类似于Messeng应用程序

我使用自动布局和[textview SetScrolEnabled:NO]允许uitextview在键盘上方动态展开。当然,它会一直增长到屏幕顶部。当它停止生长时,您将看不到任何其他文本

我试图找到它在textViewDidChange中停止增长的高度,并调用[textView SetScrolEnabled:YES],但它在增长之前缩小了初始大小


当滚动达到一定高度或无法再增长时,如何启用滚动?

您是否尝试为textView设置ContentSize?如果要等待自动布局完成,可以在viewDidLayoutSubviews中执行此操作

以下是有用的链接:


注意:这应该是一个评论,但我没有足够的声誉…

这是一项研究,这里是给你的线索

  • 对文本视图进行子类化

  • 监视contentSize的更改,可能有一个setter可以覆盖,或者只是KVO可以工作

  • 创建文本视图委托,该委托将ping回控制器以更新自动布局约束

  • 当contentSize达到您定义的最大值时,只需夹紧该值并让文本视图自然滚动即可


  • 当文本视图距离屏幕顶部达到所需距离时,向文本视图添加高度约束。我是这样做的

    -(void)textViewDidChange:(UITextView *)textView {
        if (textView.scrollEnabled == NO) {
            if (textView.frame.origin.y < 50) {
                [textView addConstraint:[NSLayoutConstraint constraintWithItem:textView attribute:NSLayoutAttributeHeight relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:textView.frame.size.height]];
                textView.scrollEnabled = YES;
            }
        }
    }
    
    -(无效)textViewDidChange:(UITextView*)textView{
    如果(textView.scrollEnabled==否){
    if(textView.frame.origin.y<50){
    [textView addConstraint:[NSLayoutConstraint constraintWithItem:textView属性:NSLayoutAttributeHeight relatedBy:0到Item:nil属性:NSLayoutAttributeNotAttribute乘数:1常量:textView.frame.size.height];
    textView.scrollEnabled=是;
    }
    }
    }
    

    当文本视图从视图顶部增长到50点以内时,它会得到一个与当前高度相等的高度约束。

    到目前为止,我找到的最佳解决方案是保持滚动功能,并根据其内容大小更改文本视图的高度

    看起来像这样:

    - (void)textViewDidChange:(UITextView *)textView
    {
        self.consTextViewHeight.constant = MIN(MAX_HEIGHT, textView.contentSize.height + textView.textContainerInset.top);
    }
    

    当我第一次尝试时,我认为它不起作用,因为文本随着每个新字符不断向上移动,然后我意识到我必须重新启用UITextView的滚动。非常好,谢谢。