objective-c - UILables、文本流和布局

标签 objective-c ios uilabel uitextview core-text

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

图 1。 UIView Showing text flow and fixed elements

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

有人可以通过示例建议执行此操作的最佳方法吗?

谢谢

最佳答案

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

首先,您的想法似乎很有可能,但会涉及大量的文本大小计算,这会很丑陋并且可能不会产生理想的结果。我看到它的工作方式是使用 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。最后,您将获得更好看的结果、可重用性/灵 active ,等等。为此,我将从 CoreText 编程指南开始:https://developer.apple.com/library/mac/#documentation/StringsTextFonts/Conceptual/CoreText_Programming/Introduction/Introduction.html

也许其他人可以提供一些示例代码,但我认为与尝试计算 4 个这样的标签相比,仅浏览文档会让您感到头疼。

编辑: 我更改了 CoreText 的链接

关于objective-c - UILables、文本流和布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977185/

相关文章:

ios - 从 UIFont 中选择一个随机字体

ios - 管理一堆具有依赖关系的 NSOperation

ios - 在 Swift 中获取 Cocoa Touch Framework 项目版本字符串

iOS弹出窗口如何去除阴影

ios - 如何在不复制 Google Drive 的情况下检查 iPhone MOV 文件的捕获日期

ios - 生成随机颜色并将其分配给对象

ios - 两个词如果合适就放在同一行,如果不合适就换行

ios - 在 Xamarin iOS 设计器中围绕 View 创建边框?

iphone - 当它是一个属性时创建一个 UILabel

ios - UISlider 不更新 Swift 中的当前值