我做了很多研究,但对我目前的情况没有任何帮助。我想要做的是UITextView
随着用户类型的增长而自动调整大小。它以默认高度开始,随着文本的增加自动增长。我添加到UITextView
我的UIView
使用中interface builder
。现在我只需要帮助让它自动成长。我在 IOS7 中找到的答案是你使用[myTextView sizeToFit]
的,auto-resize
但看起来这只适用于UITextViews
添加的内容programmatically
。
3 回答
我为此创建了 UITextView 的子类:
https://github.com/MatejBalantic/MBAutoGrowingTextView
它是一个基于自动布局的轻量级 UITextView 子类,它会根据用户输入的大小自动增长和缩小,并且可以受最大和最小高度的约束——所有这些都无需一行代码。
主要用于界面生成器,仅适用于自动布局。
您将需要设置一个委托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;
}
我建议您HPGrowingTextView
在使用自定义解决方案之前尝试一下。
如果你不喜欢它,你可以这样做:
UITextView
使用初始框架创建 a并将其添加到UIView
.- 覆盖该
textViewDidChange:
方法并CGSize
使用yourTextView.contentSize
属性获取内容。 - 使用
height
this 的属性来设置你usingCGSize
的高度。UITextView
CGRectMake
contentSize
为您提供 textView 中内容的确切大小,而无需使用(sizeWithFont:
已弃用)或sizeWithAttributes:
.
但这里有一个问题:如果您textView
包含在另一个UIView
中,您可能必须根据需要将其设置autoresizingMasks
为UIViewAutoresizingFlexibleTopMargin
, UIViewAutoresizingFlexibleBottomMargin
,UIViewAutoresizingFlexibleHeight
以便成功调整 textView 的超级视图的大小。
尝试浏览 的代码HPGrowingTextView
,您将了解此行为是如何实现的。