【问题标题】:UITextView change height instead of scrollUITextView 改变高度而不是滚动
【发布时间】:2010-04-05 19:45:58
【问题描述】:

默认情况下,UITextView 的 contentView 会在文本过多时根据其高度变为可滚动的。

我想禁用此功能,而是更新 UITextView 的高度以适合文本。我这样做的原因是因为我将 UITextView 添加为 UIScrollView 的子视图,它应该处理滚动,就像在本机邮件应用程序中一样(当您输入文本时,整个视图向上滚动,而不仅仅是 textview .

有人有一些想法/以前遇到过同样的问题吗?

【问题讨论】:

    标签: iphone uiscrollview uitextview subview


    【解决方案1】:

    这样做非常简单:

    CGRect frame = textView.frame;
    
    frame.size = textView.contentSize;
    
    textView.frame = frame;
    

    这应该设置 textview 的高度以适合其所有内容。

    【讨论】:

    • 太好了。由于评论格式,我不得不添加一些内容,我将在新答案中发布。
    • 这在 iOS5 中运行良好,但在 iOS4 上出于某种原因,光标一直想要漂移到视图范围之外。
    • 在 iPhone 6plus 上有 bug。
    【解决方案2】:

    一些小的变化:

    -(void)textViewDidChange:(UITextView *)textView {
    
        CGFloat fontHeight = (textView.font.ascender - textView.font.descender) + 1;
    
        CGRect newTextFrame = textView.frame;
        newTextFrame.size = textView.contentSize;
        newTextFrame.size.height = newTextFrame.size.height + fontHeight;
        textView.frame = newTextFrame;
    }
    

    当您拼写错误时,添加字体高度可为自动更正框留出空间。

    UITextView 也应该设置为不滚动:

    [aTextView setScrollEnabled:NO];
    

    【讨论】:

    • 如何处理将视图滚动到光标处?
    • 也可以设置 textView.clipsToBounds = NO;使自动更正框不会被剪裁。
    • 它被键盘而不是文本视图剪切。
    • 根据 textViewDidChange 的文档:文本视图调用此方法以响应用户对文本发起的更改。不会调用此方法以响应以编程方式启动的更改。
    猜你喜欢
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多