1

我做了很多研究,但对我目前的情况没有任何帮助。我想要做的是UITextView随着用户类型的增长而自动调整大小。它以默认高度开始,随着文本的增加自动增长。我添加到UITextView我的UIView使用中interface builder。现在我只需要帮助让它自动成长。我在 IOS7 中找到的答案是你使用[myTextView sizeToFit]的,auto-resize但看起来这只适用于UITextViews添加的内容programmatically

4

3 回答 3

1

我为此创建了 UITextView 的子类:

https://github.com/MatejBalantic/MBAutoGrowingTextView

它是一个基于自动布局的轻量级 UITextView 子类,它会根据用户输入的大小自动增长和缩小,并且可以受最大和最小高度的约束——所有这些都无需一行代码。

主要用于界面生成器,仅适用于自动布局。

于 2014-05-16T13:21:28.753 回答
0

您将需要设置一个委托myTextView并让它响应其文本的更改。

在您的视图控制器的界面中声明它符合UITextViewDelegate协议,例如:

@interface MyViewController : UIViewController <UITextViewDelegate>

在您的视图控制器中-viewDidLoad添加:

self.myTextView.delegate = self;

然后实现-textViewDidChange:委托方法:

- (void)textViewDidChange:(UITextView *)textView
{
    if (textView != self.myTextView)
        return;

    CGFloat const horizontalPadding = 16.0f; // experiment with these padding values
    CGFloat const verticalPadding = 16.0f;   // until the textview resizes nicely

    CGSize maxSize = CGSizeMake(textView.bounds.size.width - horizontalPadding, CGFLOAT_MAX);
    CGSize textSize;
    if ([textView.text respondsToSelector:@selector(sizeWithAttributes:)]) {
        // iOS7 and above
        NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [NSValue valueWithCGSize:maxSize], NSViewSizeDocumentAttribute,
                                    textView.font, NSFontAttributeName, nil];
        textSize = [textView.text sizeWithAttributes:attributes];
    } else {
        // iOS6 and below
        textSize = [textView.text sizeWithFont:textView.font
                             constrainedToSize:maxSize
                                 lineBreakMode:NSLineBreakByWordWrapping];
    }

    CGRect newFrame = textView.frame;
    newFrame.size.height = textSize.height + verticalPadding;
    textView.frame = newFrame;
}
于 2014-01-01T17:49:03.983 回答
0

我建议您HPGrowingTextView在使用自定义解决方案之前尝试一下。

如果你不喜欢它,你可以这样做:

  • UITextView使用初始框架创建 a并将其添加到UIView.
  • 覆盖该textViewDidChange:方法并CGSize使用yourTextView.contentSize属性获取内容。
  • 使用heightthis 的属性来设置你usingCGSize的高度。UITextViewCGRectMake

contentSize为您提供 textView 中内容的确切大小,而无需使用(sizeWithFont:已弃用)或sizeWithAttributes:.

但这里有一个问题:如果您textView包含在另一个UIView中,您可能必须根据需要将其设置autoresizingMasksUIViewAutoresizingFlexibleTopMargin, UIViewAutoresizingFlexibleBottomMarginUIViewAutoresizingFlexibleHeight以便成功调整 textView 的超级视图的大小。

尝试浏览 的代码HPGrowingTextView,您将了解此行为是如何实现的。

于 2014-01-01T20:58:28.873 回答