UITextView行间距导致段落行之间的光标高度不同

2023-12-29

我在用着NSMutableParagraphStyle in my UITextview用于在每行文本之间添加行间距。

当我在文本视图中输入内容时,光标高度是正常的。但是当我将光标位置移动到第二行(不是最后一行)上的文本时,光标高度变得更大。

我应该怎么做才能使每行文本中的光标高度正常? 这是我当前正在使用的代码:

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 30.;
textView.font = [UIFont fontWithName:@"Helvetica" size:16];
textView.attributedText = [[NSAttributedString alloc] initWithString:@"My Text" attributes:@{NSParagraphStyleAttributeName : paragraphStyle}];

最后我找到了解决我的问题的解决方案。

可以通过子类化来更改光标高度UITextView,然后覆盖caretRectForPosition:position功能。例如:

- (CGRect)caretRectForPosition:(UITextPosition *)position {
    CGRect originalRect = [super caretRectForPosition:position];
    originalRect.size.height = 18.0;
    return originalRect;
}

文档链接:https://developer.apple.com/documentation/uikit/uitextinput/1614518-caretrectforposition https://developer.apple.com/documentation/uikit/uitextinput/1614518-caretrectforposition


更新:Swift 2.x 或 Swift 3.x

See 内特的回答 https://stackoverflow.com/a/34537839/1467988.


更新:Swift 4.x 或 Swift 5.x

对于 Swift 4.x 使用caretRect(for position: UITextPosition) -> CGRect.

import UIKit

class MyTextView: UITextView {

    override func caretRect(for position: UITextPosition) -> CGRect {
        var superRect = super.caretRect(for: position)
        guard let font = self.font else { return superRect }

        // "descender" is expressed as a negative value, 
        // so to add its height you must subtract its value
        superRect.size.height = font.pointSize - font.descender 
        return superRect
    }
}

文档链接:https://developer.apple.com/documentation/uikit/uitextinput/1614518-caretrect https://developer.apple.com/documentation/uikit/uitextinput/1614518-caretrect

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

UITextView行间距导致段落行之间的光标高度不同 的相关文章

  • Apple 实时照片文件格式

    苹果将 推出现场照片 http www apple com iphone 6s cameras 在 iOS 9 iPhone 6s 中 文件格式记录在哪里 实时照片有两个资源 它们与资产标识符 UUID 作为字符串 绑定在一起 JPEG 这
  • 在没有按钮的 SwiftUI 中呈现新视图

    所以我想使用 SwiftUI 呈现一个新视图 而用户不必点击按钮 因为NavigationButton会用那个 这是一个例子 struct ContentView View var model Model var body some Vie
  • ASIHTTPRequest 登录页面

    我尝试制作一个 iPhone 应用程序 可以登录到使用 https 保护用户信息的 Web 应用程序 现在我陷入了登录页面 我不知道通过我的应用程序登录时如何检查用户网站中的真实帐户 即使我输入错误的帐户 我也只收到 200 的回复 这是我
  • NSMutableArray enumerateObjectsUsingBlock 并不像苹果所说的同步

    这是一个错误吗 我有这样的行 myArray enumerateObjectsUsingBlock id obj NSUInteger idx BOOL stop NSLog d idx NSLog end 这应该像这样打印 0 1 2 e
  • 如何在 AVCaptureVideoPreviewLayer 上添加叠加层?

    我正在使用 Swift 构建一个 iOS 应用程序 它需要二维码扫描仪功能 我已经使用 AVFoundation 实现了 QR 码扫描仪 现在我的捕获屏幕看起来与视频录制屏幕相同 即AVCaptureVideoPreviewLayer显示相
  • 裁剪图像和中心

    在 Swift 中如何裁剪图像并将其放在中心 我已经裁剪了图像 但想将其放在中间 ImgView image OrigImage var masklayer CAShapeLayer masklayer frame ImgView fram
  • WGS84 iOS 上外部 GPS 数据的大地水准面高度高度偏移

    对于我正在编写的应用程序 我们将 IOS 设备与外部传感器连接起来 该传感器通过本地 WiFi 网络输出 GPS 数据 该数据以相对于海拔高度的 原始 格式出现 一般来说 所有 GPS 高度都需要应用与基于当前位置的 WGS84 大地水准面
  • 以编程方式获取 iOS 应用程序中的内存使用情况实时/脏字节(不是驻留/真实字节)

    根据我到目前为止所读到的内容 实际 驻留字节表示分配给应用程序的字节数 包括应用程序不再使用但尚未被操作系统回收的字节数 活动 脏字节是应用程序实际使用且操作系统无法回收的字节 我认为 XCode 调试导航器中显示的数字是 Live Byt
  • 向 UIImageView 添加反射的最有效方法是什么

    我只想要最简单的方法在易于管理的 UIImageView 下进行反射 只需使用iPhone SDK 库中的示例代码 http developer apple com library ios samplecode Reflection Int
  • 如何使 TextField 右对齐(尾随)

    我正在努力拥有一个价值文本域以尾随对齐方式显示 正如你所看到的价值34 3以前导对齐方式显示 我确信我错过了一些明显的东西 但我不知道是什么 有任何想法吗 State private var endwert 34 3 var numberF
  • xamarin 中的本机链接错误

    我今天尝试编译我的 xamarin 项目 突然收到以下错误 错误 MT5210 本机链接失败 未定义符号 mono handle global vregs 请验证是否已引用所有必要的框架并且本机库是否正确 链接到 错误 MT5210 本机链
  • 如何组合两个可变数组?

    我有一个 iPhone 应用程序 我试图在其中添加两个可变数组 NSMutableArray dataArray NSMutableArray alloc init NSMutableArray dataArray1 NSMutableAr
  • 禁用应用程序的启动图像

    我想从我的应用程序禁用启动图像 我已经有一个启动屏幕 因此在应用程序启动时首先显示启动图像 然后显示启动屏幕 我想禁用启动图像并仅在应用程序启动时显示启动屏幕 请帮忙 提前致谢 你不能 因为它会一直保持到你的程序被加载并从applicati
  • AVAssetWriter 不适用于音频

    我正在尝试让音频与 iOS 应用程序的视频一起使用 视频很好 文件中没有录制任何音频 我的 iPhone 扬声器可以工作 这是初始化设置 session AVCaptureSession alloc init menu gt session
  • 如何为所有导航控制器和视图控制器设置自定义导航栏(标题 + titleView)?

    我有一个选项卡式应用程序 选项卡中有导航控制器 其中有视图控制器 它们都使用相同的导航控制器导航栏 后退按钮 徽标图像 目前 我将此代码放置在每个视图控制器中 void viewDidLoad super viewDidLoad self
  • 如何将文本从文本字段发送到另一个视图控制器

    我正在制作一个应用程序 其行为类似于 iPhone 中的默认 Messages app 用户可以在其中编写短信UITextField点击 发送 按钮后 该值UITextField in ComposeViewController将被转移到表
  • 如何在 Swift Playground 中将文本转换为 OSX 语音

    我正在尝试学习如何为 OSX 进行文本转语音 notiOS 在 Swift 中 我有一个带有代码的游乐场 import Cocoa let synth NSSpeechSynthesizer synth startSpeaking Hell
  • 动画完成后 CABasicAnimation 重置为初始值

    我正在旋转 CALayer 并尝试在动画完成后将其停止在最终位置 但动画完成后 它会重置到初始位置 xcode 文档明确指出动画不会更新属性的值 任何如何实现这一目标的建议 这就是答案 它是我的答案和克里希南的答案的结合 cabasican
  • iOS APNS:以字符串格式将设备令牌发送给提供商

    我需要通过调用在我的请求中需要 JSON 数据的服务 将 iOS 应用程序的 APNS 设备令牌发送给我的提供商 我正在阅读苹果的本地和推送通知编程指南 https developer apple com library ios docum
  • UpdatedTransactions(transactionState == .restored) 与 paymentQueueRestoreCompletedTransactionsFinished

    正如标题所描述的 实际有什么不同 如果我有这个 func paymentQueue queue SKPaymentQueue updatedTransactions transactions SKPaymentTransaction for

随机推荐

  • Pyspark Dataframe:获取满足条件的上一行

    对于 PySpark DataFrame 中的每一行 我尝试从满足特定条件的前一行获取一个值 也就是说 如果我的数据框看起来像这样 X Flag 1 1 2 0 3 0 4 0 5 1 6 0 7 0 8 0 9 1 10 0 我想要的输出
  • 找不到 JDBC 驱动程序

    try String userName root String password
  • 带 setter 的 mapState

    我想通过分配setter方法mapState 我目前使用一种解决方法 命名我感兴趣的变量 todo 作为临时名称 storetodo 然后在另一个计算变量中引用它todo methods mapMutations clearTodo upd
  • EBNF 转义字符

    我正在尝试为基于 python 的伪语言制作字符串的语法表达式 我想知道如何执行以下操作 字符串以 或 开头或结尾 它可以包含除 n 之外的任何字符 仅当另一个反斜杠开头时才能包含这些字符 例如 Mark said Boo n 公认 我只能
  • 使用 Rails 3 和远程设计 => true

    我在使用 AJAX 登录设备时遇到问题 我正在使用 remote gt true选项和 javascript 帮助程序的 jQuery 版本 https github com rails jquery ujs 当用户输入正确的信息时 会话视
  • 不使用 IFrame 的原因?

    有什么原因吗not到底要使用 iframe 吗 我目前使用它从不同的服务器加载页面 注册页面 分布式应用程序的一部分 以提供无缝体验 使用 iframe 被认为是不好的做法还是可以使用 iframe 是一个很棒的工具 它享有近乎通用的浏览器
  • 如何在 pandas 中用滚动平均值填充 nan 值

    我有一个数据框 其中几个地方包含 nan 值 我正在尝试执行数据清理 其中我用前五个实例的平均值填充 nan 值 为此 我提出了以下建议 input data frame var list fillna input data frame v
  • 如何使用 Xamarin.UITest 在 iOS 上访问照片所需的权限对话框中点击“确定”按钮?

    我正在使用 Xamarin UITest 在 iOS 应用程序上执行自动化 问题是 在访问图库上传照片时 出现一个权限对话框 我需要点击 确定 按钮将其关闭 我尝试过以下方法 但没有成功 使用树命令不会显示该对话框的层次结构 因此我 无法找
  • 抛出 BufferError 的示例

    在阅读 Python 3 3 文档时 我注意到有关 BufferError 异常的条目 当无法执行与缓冲区相关的操作时引发 现在我想知道在什么情况下代码可能会抛出此错误 以确定它是由于编程错误还是更像是某种系统错误 有人有这个例外的例子吗
  • 结构错误找不到记录器“paramiko.transport”的处理程序

    我不确定为什么会收到此错误并终止我的连接 我通过 easy install 从 1 7 5 更新了 paramiko 1 7 6 我正在尝试设置 Fabric 以将 Django 应用程序上传到我的服务器 当我尝试备份现有应用程序目录时 似
  • 将 DOM 元素创建到集合的项目中

    尝试从模板创建 DOM 元素 gota 首先我创建模板 function htmlToElement html var template document createElement template template innerHTML
  • 前端控制器与外观模式

    好的 我在网上做了一些搜索 发现this http www coderanch com t 100644 OO Patterns UML Refactoring Difference between Facade Front Control
  • 子树将主树合并到分支中: -s recursive -Xsubtree=?

    In the git book https git scm com book en v2 Git Tools Advanced Merging 子树合并 部分 它说 您也可以做相反的事情 进行更改rackmaster 分支的子目录 然后将它
  • 从浏览器缓存中删除单个文件

    我的页面中有一张图像 该图像缓存在浏览器中 现在我已经删除了图像 但是因为它已被缓存 所以请求不会发送到服务器 并且它会再次出现 那么如何从浏览器缓存中删除它呢 不 您无法物理删除缓存文件 相反 您可以动态生成文件的链接 例如 并最终用不同
  • 如何在 Windows 8 / 2012 中左对齐窗口标题?

    有没有办法 本质上 在 Windows 8 或 2012 计算机中左对齐窗口标题 Window 8 或 2012 中的窗口标题水平居中对齐 我们有一个移植到 Windows 8 2012 计算机的 WPF 应用程序 我们正在与几个客户一起测
  • 为什么我在 ~/.m2 下找不到我的 settings.xml?

    为什么我找不到我的设置 xml under m2 注意 我当前正在运行 Apache Maven3 3 9在我的机器上 settings xml 文件可能存在于两个位置 Maven 安装 maven home conf settings x
  • 多种条件提前停止

    我正在为推荐系统 项目推荐 进行多类分类 并且我目前正在使用sparse categorical crossentropy损失 因此 合理执行EarlyStopping通过监控我的验证损失 val loss像这样 tf keras call
  • 将 TFS 2010 中的源、标签和历史记录从根文件夹移动到分支

    我遇到了一个情况 我不确定是否可以解决 我最近开始组建一个从未使用过任何类型的版本控制系统的新团队 并且我们的组织使用 TFS 作为标准 我以前从未使用过 经过多次恳求 我让管理员为我在服务器上的现有代码创建一个 TFS 项目 并且由于我的
  • 如何使用 php 生成 .xlsx

    我需要生成一个带有扩展名的 Excel 文件 xlsx 这是我的简单代码 file test xlsx header Content Type application vnd openxmlformats officedocument sp
  • UITextView行间距导致段落行之间的光标高度不同

    我在用着NSMutableParagraphStyle in my UITextview用于在每行文本之间添加行间距 当我在文本视图中输入内容时 光标高度是正常的 但是当我将光标位置移动到第二行 不是最后一行 上的文本时 光标高度变得更大