当混合中有新行字符时,UITextView firstRectForRange 不起作用

2023-12-01

我使用此方法将 NSRange 转换为 CGRect,因为它与 UITextView 相关:

- (CGRect)frameOfTextRange:(NSRange)range inTextView:(UITextView *)textView
{
    UITextPosition *beginning = textView.beginningOfDocument;
    UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
    UITextPosition *end = [textView positionFromPosition:beginning offset:range.location+range.length];
    UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];
    CGRect rect = [textView firstRectForRange:textRange];
    return rect;
}

这个问题答案有人和我问同样的问题。上面的方法非常适合这个:

这是一个很棒的文本字段,是的,它是 findthistoken

不太像这样:

this is a great one
(new line)
(new line)
findthistoken

它似乎只是忽略了有两个新行字符的事实? :/

如何使其与新行字符一起使用?


您可以强制 self.textView 立即确保 textView 的布局

 [self.textView.layoutManager ensureLayoutForTextContainer:self.textView.textContainer];

将其放在您的frameOfTextRange之前:调用将为您提供正确的矩形。

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

当混合中有新行字符时,UITextView firstRectForRange 不起作用 的相关文章

随机推荐

  • 仅从特定文件夹进行 Git 合并

    我已经为客户 X 创建了一个 Rails 网站 我现在有一个客户 Y 他想要一个与客户 X 执行完全相同的操作但具有不同外观的网站 我从 clientXcode 创建了一个 git 分支 并将其命名为 clientYcode 然后我对视图进
  • 有没有办法根据 R 中另一个数据框中的共享值构建成对数据框?

    例如 DF1 是 Id1 Id2 1 10 2 10 3 7 4 7 5 10 并想要 DF2 Id1 Id2 1 2 1 5 2 5 3 4 数据框 DF2 是 DF1 中 Id1 列中的一组值 它们共享 DF1 中 Id2 中的公共值
  • 将多维数组元素转换为不同类型

    假设我有这个多维数组 float vertices new float 0f 1 28f 1 28f 2 56f 3 84f 2 56f 5 12f 1 28f 3 84f 0f 1 28f 0f 0f 1 28f new float 0f
  • 使用数组方法的素数列表

    我有一个获取素数列表的代码 def primes numbers num primes 2 3 step Math sqrt num 1 2 do i is prime true primes each do p here if p gt
  • 单元测试 ASP.Net MVC 授权属性以验证重定向到登录页面

    这可能只是需要另一双眼睛的情况 我一定错过了一些东西 但我不明白为什么这种东西不能被测试 我基本上试图通过使用 Authorize 属性标记控制器来确保未经身份验证的用户无法访问视图 并且我尝试使用以下代码对此进行测试 Fact publi
  • 重新打开窗口抛出 Gtk-CRITICAL **:gtk_widget_get_window:断言“GTK_IS_WIDGET(小部件)”失败

    我有简单的 python3 gtk3 代码 它连接到 dbus 并监听所有事件 当用户单击托盘中的图标时 他必须看到包含所有显示的早期事件的窗口 代码 我不知道问题出在哪里并且代码大小 gt 100行 https github com ra
  • string.h 中的 strupr() 和 strlwr() 是 ANSI 标准的一部分吗?

    我在互联网上寻找这个 并且在每个具有 string h 功能的地方都没有提到这两个 是因为什么 它们并不存在于每个编译器中 它们是来自 Microsoft C 库的非标准函数 此后 MS 已弃用它们 转而采用重命名的函数 strlwr an
  • C++ 中的 OpenID 库?

    我需要在 C 网站中使用 openid 但找不到可以使用的工作库 我正在尝试使用这个 http kin klever net libopkele requirements 但它会停止配置并显示以下消息 检查 OPENSSL 配置 错误 未找
  • Django 在调试模式下损坏管道

    我在 Nginx 后面的远程服务器上有 django 1 3 如果我使用 apache mod wsgi 运行 django 我可以查看 apache 日志文件中的错误 没关系 但我想在控制台中使用 如果我运行 django 自己的开发服务
  • TFS 构建代理用户功能的值可以在构建步骤中获得吗?

    我正在尝试在 TFS 中编写一个构建步骤 该步骤依赖于了解构建代理存储 nuget exe 的位置 标准 nuget install 步骤以破坏构建执行的方式破坏了参数的顺序 所以我想使用batch shell ps 步骤之一自己运行exe
  • 检查连续元素之间的差异是否相同

    我是在 Prolog 中使用算术的新手 我做过一些小程序 但主要涉及逻辑 我正在尝试实现一个将返回的函数true or false每个连续元素对之间的差异是否相同 我的输入如下所示 sameSeqDiffs 3 5 7 9 2 我觉得我需要
  • Gradle 替代 mvn install

    我在 mvn 上构建了 2 个不同的项目 我正在尝试更换为 Gradle 项目 1 是一个 SDK 项目 2 使用该 sdk 示例 在 maven 的时候 它使用 mvn install 创建工件 将整个项目添加到本地存储库中 我喜欢这样在
  • 如何将 linq 结果转换为 HashSet 或 HashedSet

    我有一个 ISet 类的属性 我正在尝试将 linq 查询的结果获取到该属性中 但不知道如何执行此操作 基本上 寻找最后一部分 ISet
  • 执行程序时,代码块打开 2 个控制台窗口

    我最近安装了 Code Blocks 并使用它进行 C 编程 我编写了一个基本的 Hello World 程序 当我运行该程序时 会打开 2 个控制台窗口而不是 1 个 如果只有输出 则第一个控制台在显示输出后关闭 然后第二个窗口保持打开状
  • 如果数据库发生变化,自动刷新内容

    当 mysql 数据库表更改时 如何自动将数据库行 PHP 的值添加到页面 而不刷新页面本身 所以 它有点像这样 自动刷新浏览器以响应文件系统更改 but当数据库发生变化时 不要刷新浏览器来更改文件系统 而是更新内容 而不刷新任何内容 谢谢
  • 使用Session存储Datatable

    目前 我们使用会话在页面中存储数据表 这样我们就不必一次又一次地访问数据库来获取相同的数据表 但我担心它会占用服务器内存 如果有一天大量用户登录 服务器的响应会变慢 我们的应用程序也可能崩溃 请告诉我将数据表存储到会话中是个好主意还是我们应
  • flex / bison:如何在同一输入文件上切换两个词法分析器

    我如何移交打开的文件 例如由另一个扫描仪读取到下一个扫描仪 并将其交给解析器 Flex 缓冲区无法轻松地从一台扫描仪传输到另一台扫描仪 许多细节对于扫描仪来说是私有的 需要进行逆向工程 从而导致可维护性的丧失 然而 只要语义类型兼容 将两个
  • 在辅助监视器上运行单独的应用程序

    Android 支持将应用程序渲染到辅助屏幕 4 2 中添加 但是否可以在主显示器上运行一个应用程序 在辅助显示器上运行另一个应用程序 Android SDK 附带一个Presentation允许前台活动在外部显示器上显示替代内容的类 这是
  • 远程:致命:内存不足,使用 post-receive 挂钩在 git Push 上重新分配失败

    当我做git push remotename branchname到我与 1and1 共 享主机上的远程时 我收到以下错误消息 Counting objects 7 done Delta compression using up to 8
  • 当混合中有新行字符时,UITextView firstRectForRange 不起作用

    我使用此方法将 NSRange 转换为 CGRect 因为它与 UITextView 相关 CGRect frameOfTextRange NSRange range inTextView UITextView textView UITex