UILables,文本流和布局

时间:2012-10-19 15:09:54

标签: objective-c ios uilabel uitextview core-text

考虑以下情况,我将段落数据发送到需要放置在背景图像上的视图,该图像在顶部和底部具有固定元素(图1)

FIG1。UIView Showing text flow and fixed elements

我的想法是把它分成4个标签(Fig1.example2)我的问题是如何让文本流过标签1-4,因为标签1,2& 3 ar固定高度。我在这里假设标签3应该在4之前填充,因此附图中的布局。

有人可以用一个例子来建议这样做的最好方法吗?

由于

2 个答案:

答案 0 :(得分:2)

希望我能提供更多帮助,但我想我至少可以指出你正确的方向。

首先,您的想法似乎很有可能,但会涉及大量文本大小的计算,这些计算会很难看,并且可能无法产生理想的结果。我看到它的工作方式是使用sizeWithFont对字符串的部分进行二进制搜索:直到你可以最好地猜测标签适合该大小的内容并且仍然看起来“正确”。然后你必须实际分解字符串并将其跟踪成碎片......似乎错了。

在iOS 6中(遗憾的是现在不适用于您,但我会将其作为潜在的好处发布给其他人),您可能会使用一个UILabel和一个NSAttributed字符串。这里有几个选项,(我还没有这样做,所以我不确定哪个是最好的)但似乎如果你可以用html格式化页面,你可以初始化属性字符串那样。

来自文档: 您可以使用初始化方法initWithHTML:documentAttributes:和initWithHTML:baseURL:documentAttributes:从HTML数据创建属性字符串。这些方法返回HTML定义的文本属性作为字符串的属性。它们返回由HTML定义的文档级属性,例如纸张和边距大小,通过引用NSDictionary对象,如“RTF文件和归属字符串”中所述。这些方法将HTML以及可能的内容转换为Cocoa文本的结构系统,但Application Kit不提供任意HTML的完整,真实的渲染。

此处的替代方法是仅使用可用属性,根据图像大小设置线条缩进等。我没有在这个级别使用属性字符串,所以我最好的参考是开发人员视频和NSAttributedString的编程指南。 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/AttributedStrings/AttributedStrings.html#//apple_ref/doc/uid/10000036-BBCCGDBG

对于较小版本的iOS,您最好不要熟悉CoreText。最后,您将获得更好看的结果,可重用性/灵活性,这个列表还在继续。为此,我将从CoreText编程指南开始:https://developer.apple.com/library/mac/#documentation/StringsTextFonts/Conceptual/CoreText_Programming/Introduction/Introduction.html

也许其他人可以提供一些示例代码,但我认为仅仅查看文档会比尝试计算4个这样的标签更少令人头疼。

编辑: 我更改了CoreText的链接

答案 1 :(得分:0)

你必须使用CoreText:用它创建你的AttributedString和一个CTFramesetter。

然后,您可以为每个文本框获取CTFrame,并在图形上下文中绘制。

https://developer.apple.com/library/mac/#documentation/Carbon/Reference/CTFramesetterRef/Reference/reference.html#//apple_ref/doc/uid/TP40005105

您也可以使用UIWebView