iOS中的长文本高度计算

很多的时候如果只是要显示一些简单的短文本,比如确定、取消什么的,一个UILabel就足够了。

 

但是某些情况下,文本较长。包含这些文本的View的高度取决于文本的高度。比如我们常见的

微博。虽然文本所占的高度内容限制在了140字,但是用户发的微博是140字内的多少字,

我们不清楚。那么在用到UITableView的时候,每条微博所在的Cell的高度都要根据其中包含的

文字及其他内容所需要的实际高度来进行设定。当然,此文只讨论文本的高度计算问题,而且

难度也只集中在文本的动态高度上。 

 

长文本高度的计算没有方便的方法,虽然简单。在计算前必须要给出长文本所在view的宽度

 和一个无限高度,然后计算长文本实际使用的高度。由以上条件可以得出一个计算公式:

         实际高度 = f(text, view.width, 9999);

但是还有一个因素不能忘记:字体(font )。用9999代表无限高度这个不用解释了吧:

目前来说iPhone的显示高度还没有9999这么多。 但是这里的无限高度可以看做是一个常数。所以

从参数中去掉。最后的公式是:

            实际高度 = f(text, font, view.width);

很幸运,上面公式里的f,也就是映射关系非常简单。从下面的一个例子可见端倪。 

1 - (CGFloat) calculateTextHeight:(UIFont *)font givenText:(NSString *)text givenWidth:(NSUinteger)width{
2  
3      CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(width, 9999)
4                                                lineBreakMode:UILineBreakModeWordWrap];
5      CGFloat delta = size.height;
6  
7      return delta;
8 }

 

 

最后你可以用计算出来的不同长度文本的高度来设置包含这段文本的View的高度。如下所示:

 

 1  - (void) resizeLabel:(UILabel *)theLabel shrinkViewIfLabelShrinks:(BOOL)canShrink {
 2     CGRect frame = [theLabel frame];
 3     CGSize size = [self calculateTextHeight:theLabel.font givenText:theLabel.text givenWidth:frame.size.width];
 4 
 5     CGFloat delta = size.height - frame.size.height;
 6     frame.size.height = size.height;
 7     [theLabel setFrame:frame];
 8  
 9     CGRect contentFrame = self.frame;
10     contentFrame.size.height = contentFrame.size.height + delta;
11     if(canShrink || delta > 0) {
12         [self setFrame:contentFrame];
13 }

 

全文完。如果对你有帮助,请点推荐。谢谢!

 

 

 

 

 

 

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/archive/2012/07/31/2617385.html

时间: 2024-10-29 04:00:01

iOS中的长文本高度计算的相关文章

ios-UITextView中粘贴长文本

问题描述 UITextView中粘贴长文本 如何在UITextView中粘贴长文本?现在我只要一将数据粘贴到textView.text中就会出错. txtView.txt = @"About us myventr.co is a web-based tool for event creation, event searching and online ticket selling whilst also serving as a social media network. myventr.co

设计iOS中随系统键盘弹收和内容文字长度自适应高度的文本框

设计iOS中随系统键盘弹收和内容文字长度自适应高度的文本框     文本输入框是多数与社交相关的app中不可或缺的一个控件,这些文本输入框应该具备如下的功能: 1.在键盘为弹起时,输入框悬浮在界面底部. 2.当键盘弹起时,输入框位置上移至键盘上方,并且动画应与键盘同步. 3.当输入的文字超出一行时,输入框应想用的进行高度扩展. 4.当输入框的高度达到某一极限值时,输入框高度不应继续扩展,文字区域应该支持滑动.     使用autolayout布局技术加上对键盘的相关监听,可以十分方便的实现上述效

精简计算UITableView文本高度

精简计算UITableView文本高度 本人视频教程系类   iOS中CALayer的使用 最终效果: 核心源码(计算文本高度的类) NSString+StringHeight.h 与 NSString+StringHeight.m // // NSString+StringHeight.h // USA // // Created by YouXianMing on 14/12/10. // Copyright (c) 2014年 fuhuaqi. All rights reserved. /

IOS改变UISearchBar中搜索框的高度_IOS

一.系统的searchBar 1.UISearchBar的中子控件及其布局 UIView(直接子控件) frame 等于 searchBar的bounds,view的子控件及其布局 UISearchBarBackground(间接子控件) frame 等于searchBar的bounds UISearchBarTextField(间接子控件) frame.origin等于(8.0, 6.0),即不等于searchBar的bounds 2.改变searchBar的frame只会影响其中搜索框的宽度

在Web应用中图片和长文本的处理策略总结

web|策略  不难认识到,在web应用中图片/多媒体和长文体的处理策略,很大程度上决定中一个系统的性能和负载能力.    这几天在处理图片上载的同时,也在考虑着最合理的对图片和长文本的存储.多年前,我喜欢把图片和长文本都存进oracle中,目的是备份方便,只需要 exp就可以连图片一起备分起来,不用一个个地照顾目录.但是缺点也随着访问量上升而一点点显示出来:一来是大大加重了数据库服务器的负担:二来使用 BLOG/CLOG并不是SQL92支持的标准SQL,令开发持久性的对象变得复杂;其三,ora

iOS中关于列表滚动流畅的一些探讨

本文讲的是iOS中关于列表滚动流畅的一些探讨,近些年,App 越来越推崇体验至上,随随便便乱写一通的话已经很难让用户买帐了,顺滑的列表便是其中很重要的一点.如果一个 App 的页面滚动起来总是卡顿卡顿的,轻则被当作反面教材来吐槽或者衬托"我们的 App balabala-",重则直接卸载.正好最近在优化这一块儿,总结记录下. 如果说有什么好的博客文章推荐,ibireme 的 iOS 保持界面流畅的技巧 这篇堪称业界毒瘤,墙裂推荐反复阅读.这篇文章中讲解了很多的优化点,我自己总结了下收益

iOS中 图文混排/自定义图文混排 作者:韩俊强

指示根视图:(准备几张图片,把label加载在window上) CustomLable *label = [[CustomLable alloc]initWithFrame:CGRectMake(0, 60, self.window.bounds.size.width, self.window.bounds.size.height)]; label.backgroundColor = [UIColor greenColor]; [self.window addSubview:label]; 引进

iOS中UITextView方法解读

iOS中UITextView方法解读 常用属性解读: @property(nonatomic,assign) id<UITextViewDelegate> delegate; 设置代理属性 @property(nonatomic,copy) NSString *text; textView上的文本 @property(nonatomic,retain) UIFont *font; 设置文本字体 @property(nonatomic,retain) UIColor *textColor; 设置

iOS中的动画

摘要 本文主要介绍核iOS中的动画:核心动画Core Animation, UIView动画, Block动画, UIImageView的帧动画. 核心动画Core Animation UIView动画 Block动画 UIImageView的帧动画 目录[-] iOS中的动画   Core Animation CAAnimation: CAPropertyAnimation   CAKeyframeAnimation CATransition UIView动画 Block动画 UIImageV