在 NSLayoutManager 中使用boundingRectForGlyphRange计算字边界时如何消除前导空格

2024-03-09

我正在 iOS 上将多行字符串分解为单词边界。我的解决方案以 NSLayoutManager 的boundingRectForGlyphRange 方法为中心。它几乎可以工作,只是每个单词的矩形向右偏移了几个像素。换句话说, NSLayoutManager 似乎在每行上添加前导空格/缩进,我找不到任何方法来覆盖此行为。

我尝试使用 NSLayoutManager.usesFontLeading 以及 NSParagraphStyle.headIndent 但没有任何结果:

 NSLayoutManager* layout = [NSLayoutManager new];
layout.usesFontLeading = NO;
NSMutableParagraphStyle* paragraphStyle = [NSMutableParagraphStyle new];
paragraphStyle.headIndent = paragraphStyle.firstLineHeadIndent = 0;
NSTextStorage* textStorage = [[NSTextStorage alloc] initWithString:self attributes:@{NSFontAttributeName:font, NSParagraphStyleAttributeName:paragraphStyle}];
layout.textStorage = textStorage;
NSTextContainer* textContainer = [[NSTextContainer alloc] initWithSize:size];
[layout addTextContainer:textContainer];

// compute bounding rect for each word range
for (NSValue* wordRangeValue in wordRanges)
{
    NSRange wordRange = [wordRangeValue rangeValue];
    NSRange wordGlyphRange = [layout glyphRangeForCharacterRange:wordRange actualCharacterRange:NULL];
    CGRect wordBounds = [layout boundingRectForGlyphRange:wordGlyphRange inTextContainer:textContainer];
}

屏幕截图:灰色矩形代表标签边界,红色矩形代表每个标签的文本矩形以及通过上面的 [boundingRectForGlyphRange:] 方法计算出的单词边界。请注意,计算出的单词边界存在几个像素的偏差。

我也对计算字边界的其他方法持开放态度,但boundingRectForGlyphRange对于我的目的来说似乎非常方便。


要忽略左边距,请使用:

textContainer.lineFragmentPadding = 0;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 NSLayoutManager 中使用boundingRectForGlyphRange计算字边界时如何消除前导空格 的相关文章

  • iPad 上的 Cordova 锁定方向失败

    我正在使用 cordova 3 5 0 0 2 6 最后一个稳定版本 我在锁定 iPad 设备的方向时遇到问题 在 iPhone 上它可以正常工作 但在 iPad 上方向未锁定 我想锁定整个应用程序而不仅仅是页面 这是我当前的 config
  • 将 NSString 拆分为子字符串的最有效的内存方法

    我有以下代码 int start html rangeOfString class WordSection1 gt location 24 int end html rangeOfString div class location self
  • 无法在 Swift 的 Storyboard 中加载 UIViewController XIB 文件

    我读了使用 XCode 故事板实例化使用 XIB 进行设计的视图控制器 https stackoverflow com questions 9155719 using xcode storyboard to instantiate view
  • 如何将 PhoneGap 调试控制台与 CLI 集成?

    PhoneGap 网站上的此页面http docs phonegap com en 3 3 0 guide cli index md html The 20Command Line 20Interface http docs phonega
  • 自定义 UISearchController 动画

    底线问题 如何覆盖取消属于 UISearchController 的 searchBar 的默认动画 标准搜索控制器行为 好的 我正在尝试为附加到 UISearchController 的 UISearchBar 变为活动状态时创建自定义动
  • 升级到 SDK 4.1 后 Facebook 登录失败(总是 isCancelled)

    我已在 iOS 应用程序中将 Facebook SDK 从 3 21 1 升级到 4 1 已上线 我仔细遵循升级指南 并实施了新的登录方法 我使用的代码是 Facebook 文档中提供的代码 但是自从升级以来 每次我尝试登录 设备或模拟器
  • iOS 中特定字符串的 SHA1

    根据我的要求 输入字符串必须转换为字节值 string 的每个字符都是 16 位值 必须转换为低 8 位 然后在字节数组上计算 Sha1 生成的 SHA 1 将转换为 40 个字符的字符串 我知道如何将字符串转换为 SHA1 但其余部分对我
  • iOS) 照片扩展无法保存更改问题

    我正在制作照片扩展 但是当我尝试保存更改时 点击 完成 按钮 警报消息显示 无法保存更改 发生错误 节省的同时 请稍后再试 这是我的代码finishContentEditingWithCompletionHandler completion
  • 如何检测和处理UIWebView中的HTTP错误代码?

    我想在收到 HTTP 错误 404 等时通知用户 我怎样才能检测到这一点 我已经尝试过实施 void webView UIWebView webView didFailLoadWithError NSError error 但当我收到 40
  • iOS7状态栏和导航栏问题

    我正在将我的应用程序迁移到 iOS 7 为了处理状态栏问题 我添加了以下代码 if UIDevice currentDevice systemVersion floatValue gt 7 0f CGRect frame self navi
  • 从两个相交的多边形创建新的 MKPolygon

    我知道确实有一个具体的问题讨论了这一点 但它有点老了 如果可能的话 我想了解更多技术性的知识 首先看一下这个截图 https www dropbox com s f94q3qaxrog0ec9 intersections png https
  • 从实时照片中提取视频部分

    有谁知道如何从实时照片中提取视频部分 我正在开发一个将 Live Photos 转换为 GIF 的应用程序 第一步是从 Live Photo 中获取视频文件 看起来这应该是可能的 因为如果你将手机插入 Mac 你就可以看到单独的图像和视频文
  • 检查文本字段是否为空会导致 Swift 2 错误

    我正在尝试检查文本框是否没有值 当我这样做时 if userEmail isEmpty userPassword isEmpty userPasswordRepeat isEmpty I get the following error I
  • 根据 AVPlayer 的请求添加自定义标头字段

    使用 AVPlayer 时是否可以将带有 http 请求的标头发送到音频文件 我需要能够在服务器接收到标头的内容时检查标头的内容 以便限制对所请求的文件的访问 您可以使用AVURLAssetHTTPHeaderFieldsKey of AV
  • 在 iOS8.3 上显示警报视图时不必要地触发 iOS 键盘通知

    我们正在观察 iOS 8 3 上键盘将显示和隐藏通知的异常行为 视图控制器 监听键盘通知 有一个文本字段 单击并点击提交按钮后 该方法首先从文本字段中退出第一响应者 并显示一条警报以通知警告 一切正常 它会关闭键盘并按预期显示警报 也调用
  • 如何将预编译头文件添加到我的 ios 项目中?

    我希望创建一个预编译头文件 以避免在项目中的每个头文件中包含相同的调试和跟踪库 我创建了一个名为 Prefix pch 的文件 ifdef OBJC import Blah h import Blarg h endif 并将其添加到项目中
  • Swift - 集成 GameCenter 以使用排行榜

    我正在用 Swift 制作一个游戏 我希望能够使用 GameCenter 发布用户的分数 以便可以看到所有用户的分数 然而 我花了一天的时间试图弄清楚如何做到这一点 但我没有找到任何有用的说明 我对 iOS 编程和 Swift 还很陌生 关
  • 用于 RSS feed 解析的 Objective-C 库?

    我正在为 iOS 应用程序寻找一个 Objective C 库 该库将解析并显示 RSS 提要中的文章 具体来说 我正在寻找为新闻网站制作一个应用程序 如果可能的话 该框架应该能够使用各种 RSS XML 结构 嗯 有两个不同的新闻网站 一
  • 检查indexPath处的单元格在屏幕UICollectionView上是否可见

    我有一个CollectionView向用户显示图像 我在后台下载这些 下载完成后 我调用以下函数来更新collectionViewCell并显示图像 func handlePhotoDownloadCompletion notificati
  • 与桌面浏览器相比,移动浏览器有多强大? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐