自动化UITextView IOS7

时间:2014-01-01 04:33:18

标签: ios ios7 uitextview sizetofit

我做了很多研究但没有帮助我目前的情况。我想要做的是自动调整大小UITextView,随着用户的输入而增长。它以默认高度开始,随着文本的增加自动增长。我使用UITextViewUIView添加了interface builder。现在我只需要帮助它自动增长。我在IOS7中找到的答案是[myTextView sizeToFit]使用auto-resize,但这看起来只适用于添加UITextViews的{​​{1}}。

3 个答案:

答案 0 :(得分:1)

我为此创建了UITextView的子类:

https://github.com/MatejBalantic/MBAutoGrowingTextView

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

主要用于“界面”构建器,仅适用于“自动布局”。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

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

  • 使用初始框架创建UITextView并将其添加到UIView
  • 覆盖textViewDidChange:方法并使用CGSize属性获取yourTextView.contentSize内容。
  • 使用此height的{​​{1}}属性,使用CGSize设置UITextView的高度。

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

但请注意:如果您的sizeWithAttributes:包含在另一个textView中,则可能需要将UIView设置为autoresizingMasksUIViewAutoresizingFlexibleTopMargin,{ {1}}根据您的需要,成功调整textView的超视图大小。

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