网站seo最新优化方法,山西seo推广,外贸三种语言网站建设,类似 wordpress 建站LOFTER app需要实现了一个类似iPhone短信输入框的功能#xff0c;它的功能其实蛮简单#xff0c;就是#xff1a;【UITextView的高度随着内容高度的变化而变化】。实现思路应该是#xff1a; 在UITextView的textChanged事件响应代码里计算输入内容的高度#xff0c;然后如… LOFTER app需要实现了一个类似iPhone短信输入框的功能它的功能其实蛮简单就是【UITextView的高度随着内容高度的变化而变化】。实现思路应该是 在UITextView的textChanged事件响应代码里计算输入内容的高度然后如果高度与文本变化前比起来有变化则修改UITextView的高度为这个新的高度。 这看起来很简单。 添加内容变化的通知响应事件 [[NSNotificationCenter defaultCenter] addObserver:self selector:selector(textChanged:) name: UITextViewTextDidChangeNotification object:nil]; 计算内容高度有两种方式 计算输入文字在指定字体、指定容器和指定换行方式下的size. CGSize newSize [textView.text sizeWithFont:[UIFont fontWithName:Helvetica size:14] constrainedToSize:CGSizeMake(222,9999) lineBreakMode:UILineBreakModeWordWrap]; 2. textView继承自UIScrollView直接从contentSize属性获取 textView.contentSize.height 第一种方式拿出来的高度需要再加上padding的值才是最终的值即每行的空白区域并且需要指定constrainedToSize不太灵活。第二种方法简单直接准确我选择了它。 在IOS 5.0及以上以上实现已经足够完美了。在IOS4.3中发现了bug当文本框变成多行然后清空文本框再输入文字时发现内容和光标跑到了UITextView上方并且不可见。Google关键字one line uitextview可以发现类似的bug提问。经过查证资料和跟踪代码根本原因应该UITextView的Insets.bottom在文本输入的过程中被不断地自动设置造成的。这是UITextView的默认实现行为但这肯定是IOS4.3的bug而IOS5.0修复了它。解决办法就是试图阻止UITextView设置contentInset我们可以继承UITextView并且覆盖setContentInset:方法来达到目的在setContentInset:里只需要设置一个固定的contentInset.bottom即可。 还有一个地方需要注意当你清空输入框时(_textView.text;)不会自动触发textChanged:你需要重写setText:方法来调用textChanged:。并且你清空textview后你拿到的contentsize也不准确所以还需要根据text是否为空来设定一个最小的高度。 在iOS 7以前如果要实现UITextView自适应高度的话可通过取contentSize.height的方法来设置。但在iOS 7上这种方法是无效的下面是一种简单的处理方法- (CGSize)contentSizeOfTextView:(UITextView *)textView{ CGSize textViewSize [textView sizeThatFits:CGSizeMake(textView.frame.size.width, FLT_MAX)]; return textViewSize;} 转载于:https://www.cnblogs.com/melons/p/5792021.html