具有动态高度的 UITextView
Posted
技术标签:
【中文标题】具有动态高度的 UITextView【英文标题】:UITextView with dynamically height 【发布时间】:2012-10-19 13:21:38 【问题描述】:我有一个 textView 可以插入不同长度的不同文本,有些短,有些长.. UITextView 是 scrollView 的子视图。如何根据输入文本的长度动态设置 UITextView 的高度?
ViewDidLoad 中的这段代码不起作用:
self.textView.contentSize = [self.textView.text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(100, self.textView.contentSize.height) lineBreakMode:UIViewAutoresizingFlexibleHeight];
【问题讨论】:
这可能会帮助你github.com/HansPinckaers/GrowingTextView 正确答案在这里:***.com/questions/50467/… 【参考方案1】:这不起作用,因为您的约束是 TextView 的当前 contentSize。你应该放你想要的最大尺寸。
例如你的代码可能是这样的:
#define kMaxHeight 100.f
self.textView.contentSize = [self.textView.text sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:CGSizeMake(100, kMaxHeight)
lineBreakMode:UIViewAutoresizingFlexibleHeight];
希望对你有帮助
【讨论】:
它为我工作...动态内容没有滚动...thanx【参考方案2】:Calculate string size
那个fits
在UITextView
:
[yourString sizeWithFont:yourtxtView.font
constrainedToSize:CGSizeMake(yourtxtView.frame.size.width,1000)
lineBreakMode:UILineBreakModeWordWrap];
Change frame
的UITextView
yourtxtView.frame = CGRectMake(yourtxtView.frame.origin.x,yourtxtView.frame.origin.y,yourtxtView.frame.size.width,yourtxtView.frame.size.height+20);
【讨论】:
【参考方案3】:由于 UITextView 是 UIScrollView 的子类,所以这可能会有所帮助:
UITextView *textView = [UITextView new];
textView.text = @"Your texts ......";
CGSize contentSize = textView.contentSize ;
CGRect frame = textView.frame ;
frame.size.height = contentSize.height ;
textView.frame = frame ;
【讨论】:
【参考方案4】:下面的代码正在运行。请尝试一下
// leave the width at 300 otherwise the height wont measure correctly
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10.0f, 0.0f, 300.0f, 100.0f)];
// add text to the UITextView first so we know what size to make it
textView.text = [_dictSelected objectForKey:@"body"];
// get the size of the UITextView based on what it would be with the text
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
textView.frame = newFrame;
【讨论】:
以上是关于具有动态高度的 UITextView的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中创建具有动态 tableview 高度的动态 tableview 单元格
UICollectionViewCell 具有 2 列网格和动态高度
UITableViewCell 具有嵌入式垂直堆栈视图设置,具有自动布局和动态高度