我做了很多研究但没有帮助我目前的情况。我想要做的是自动调整大小UITextView
,随着用户的输入而增长。它以默认高度开始,随着文本的增加自动增长。我使用UITextView
向UIView
添加了interface builder
。现在我只需要帮助它自动增长。我在IOS7中找到的答案是[myTextView sizeToFit]
使用auto-resize
,但这看起来只适用于添加UITextViews
的{{1}}。
答案 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
设置为autoresizingMasks
,UIViewAutoresizingFlexibleTopMargin
,{ {1}}根据您的需要,成功调整textView的超视图大小。
尝试浏览UIViewAutoresizingFlexibleBottomMargin
的代码,您将了解此行为是如何实现的。