1

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

图。1。UIView 显示文本流和固定元素

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

有人可以举个例子来建议最好的方法吗?

谢谢

4

2 回答 2

2

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

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

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

来自文档:您可以使用初始化方法 initWithHTML:documentAttributes: 和 initWithHTML:baseURL:documentAttributes: 从 HTML 数据创建属性字符串。这些方法返回由 HTML 定义的文本属性作为字符串的属性。它们通过引用 NSDictionary 对象返回由 HTML 定义的文档级属性,例如纸张和边距大小,如“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 的链接

于 2012-10-19T15:55:30.620 回答
0

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

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

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

您还可以使用 UIWebView

于 2012-10-19T18:44:34.797 回答