在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,
乍一看去相似一个网页,其实这样效果并非由
UIWebView 加载网页实现。现在分享一种比
较简单的实现方式
iOS sdk 中为我们提供
了一套完善的文字排版开发
CoreText。CoreText
库中提供了很多的工具来对
文本进行操作,例如
CTFont、CTLine、CTFrame
等。利用这些工具可以对文
字字体每一行每一段落进行
操作。
此例中默认图片都在右上方,且为了美观和开发简便设定所占宽度都相同。
1. 首先,需要引入 CoreText 库
在需要使用的类文件中添加
#import <CoreText/CoreText.h>头文件。
2. 设置文本的参数
创建一个
NSMutableAttributedString 对象,包含所需展示的文本字符串。这样就可以对
其进行设置了。通过
CTFontCreateWithName 函数创建一个 CTFont 对象,利用
NSMutableAttributedString 对象的 addAttribute 方法进行设置。类似的方法可以设置字间距。
对其方式与行间距的设置方式:
[cpp]
// 文本对齐方式
CTTextAlignment alignment = kCTLeftTextAlignment;
CTParagraphStyleSetting alignmentStyle;
alignmentStyle.spec = kCTParagraphStyleSpecifierAlignment;
alignmentStyle.valueSize = sizeof(alignment);
alignmentStyle.value = &alignment;
// 创建设置数组
CTParagraphStyleSetting settings[] ={alignmentStyle};
CTParagraphStyleRef style = CTParagraphStyleCreate(settings, 1);
同样使用
addAttribute 设置字符串对象。这样的方法还可以设置行间距,段间距等参数。
3. 计算图片所占高度。图片可以使用 UIImageView 来进行显示。很容易便可获取每
张图片所占总高度。
4. 由于图片宽度是固定的这样就可以计算每行文字缩短的字数。只要文本的总体高