如何判断 UILabel 何时被截断和/或其换行位置将发生变化

2023-11-23

我有一个多线UILabel (numberOfLines= 0)。它的宽度可以在运行时改变,有时这会导致截断和/或重新包装。一些例子最好地说明了这一点:

示例 1:宽度的减小导致不同的断线点

enter image description here enter image description here

示例2:宽度减少导致截断

enter image description here enter image description here

示例 3:宽度的减小导致截断和不同的换行位置

enter image description here enter image description here

示例 4:宽度的减小对截断或换行位置没有任何影响

enter image description here enter image description here

由于格式的这种变化可能非常不和谐,我打算将其隐藏在一些动画后面(可能是淡入/淡出)。然而,第一个障碍是确定when我需要这样做。我不想在标签调整大小时应用动画 - 仅当它会导致截断或换行位置发生变化时。

我该如何测试这个?对于示例 1、2 和 3,测试应返回 YES,但对于示例 4,测试应返回 NO。

注意:在我的示例中,调整大小永远不会改变行数。

注 2:如果有人有一些与文本格式相关的更好标签,我很想知道它们 - 请随意编辑。

注 3:如果您有兴趣看到此行为的完成,请在 iPhone 上尝试 Apple 的 mail.app。查看收件箱时,滑动电子邮件并观察摘要行在重新换行和/或截断时淡入/淡出(但在不需要时不要淡入/淡出)。


斯威夫特3解决方案

您可以在分配字符串后计算行数,并与标签的最大行数进行比较。

import Foundation
import UIKit

extension UILabel {

    func countLabelLines() -> Int {
        // Call self.layoutIfNeeded() if your view is uses auto layout
        let myText = self.text! as NSString
        let attributes = [NSFontAttributeName : self.font]

        let labelSize = myText.boundingRect(with: CGSize(width: self.bounds.width, height: CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: attributes, context: nil)
        return Int(ceil(CGFloat(labelSize.height) / self.font.lineHeight))
    }

    func isTruncated() -> Bool {

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

如何判断 UILabel 何时被截断和/或其换行位置将发生变化 的相关文章

  • 将自定义数据包含到 iOS 故障转储中

    你好 堆栈溢出 有一个简单的问题要问您 当我的应用程序在用户的设备上崩溃时 是否可以将自定义错误数据嵌入到自动生成的 iOS 故障转储中 例如 我的 SQlite 数据库由于某种原因无法运行 例如 数据库文件已损坏 我无法从这个错误中恢复
  • 如何从 SDK 实现每个会话的 Google Places 自动完成功能?

    是否可以从 Android 和 iOS 应用程序的 place sdk 实现基于会话的自动完成 根据 6 月 11 日生效的新 Google 地图框架定价 对自动完成的请求可以分为基于击键 会话的请求 我找不到描述实施步骤的文档 除了这个参
  • 错误域=kAFAssistantErrorDomain 代码=209“(空)”

    我面临着一个问题SFSpeechRecognizer 启动应用程序几秒钟后 我开始收到错误消息 错误域 kAFAssistantErrorDomain 代码 209 空 和 错误 域 kAFAssistantErrorDomain 代码 2
  • Objective-C UILabel 作为超链接

    我正在尝试做一个UILabel一个链接UIWebView 我怎样才能做一个UILabel作为超链接 您可以使用 UITapGestureRecognizer 它将实现与您想要的类似的功能 UILabel myLabel UILabel al
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • iOS:生成pdf时绘制文本时如何设置字体?

    我在ios应用程序中使用drawpdf函数生成pdf 同时调用nsobject类中的drawtext函数 它根据我指定的框架和字符串清楚地绘制文本 我的代码是 void drawText NSString textToDraw inFram
  • Swift,以编程方式更改 UICollectionViewCell 和 UILabel(单元格内)的宽度

    我已将单元格 UICollectionViewCell 的宽度设置为等于 UICollectionView 的宽度 并且我尝试对该单元格中包含的 UILabel 执行完全相同的操作 我认为下面的代码准确地解释了我想要实现的目标 所以我在这里
  • 为什么 iOS 启动屏幕很慢?

    我的 iOS 应用程序启动屏幕大约需要 3 5 秒 我有一张将在启动屏幕后加载的地图 我的用户必须等待启动屏幕加载 然后再等待 3 秒才能加载地图 有没有办法最大限度地减少启动屏幕时间 基本上这种延迟意味着you在启动过程中做了一些非常错误
  • Objective-C NSString for 循环与characterAtIndex

    我试图逐个字符地循环遍历 NSString 但出现 EXC BAD ACCESS 错误 您知道如何正确执行此操作吗 我已经在谷歌上搜索了几个小时但无法弄清楚 这是我的代码 m self textLength self text length
  • 如何在 iPhone 上使用带有线程的 sqlite + fdbm 库

    相关这个问题 https stackoverflow com questions 1082554 我想把数据加载放在后台 但是 我收到 库例程调用不按顺序 错误 In 这个所以线程 https stackoverflow com quest
  • AVAssetExportSession 无法导出从 iCloud 下载的视频

    我正在尝试创建从用户相册中选择的视频的缩小版本 输出的最大尺寸为 720p 因此 在检索视频时 我使用 mediumQualityFormat as the deliveryMode 如果用户设备中不存在原始视频或其中等质量版本 这会导致
  • UIPickerView selectRow 未按预期工作

    我创建了一个UIPickerView它有两个组件 第一个组件 A 的行数固定为 13 另一个组件 B 的行数可变 具体取决于 A 中选择的行 加载时UIPickerView我调用以下命令 以便我可以在两个组件中默认选择 但是我遇到的问题是只
  • 在实例化对象之前是否可以检查故事板中是否存在标识符?

    在我的代码中我有这一行 但我想知道是否有办法检查是否 一些控制器 在我将它与 一起使用之前就存在实例化ViewControllerWithIdentifier 方法 如果标识符不存在 则应用程序崩溃 如果没有好的方法 这并不是一个大问题 我
  • 如果我使用自定义 UITableViewCell,是否需要设置 heightForRowAtIndexPath?

    如果我使用自定义 UITableViewCell 是否需要设置 heightForRowAtIndexPath 在我的 NIB 中 我已经设置了单元高度 当我覆盖 heightForRowAtIndexPath 时 单元格的内容不会出现 即
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • 如何在 UICollectionView 中将行居中?

    我有一个UICollectionView与随机细胞 有什么方法可以让我将行居中吗 默认情况下它是这样的 x x x x x x x x x x x x x x 这是所需的布局 x x x x x x x x x x x x 我必须做这样的事
  • 模态转场需要点击 2 次而不是 1 次

    我的 UITableView 需要点击 2 次才能显示所选单元格的详细信息页面 一次用于选择 另一次用于显示详细信息视图 我希望有一个 CLI 直接显示所单击单元格的详细视图 我在 UITableViewManager m 中使用此方法的模
  • 像 TraceGL 一样分析 Objective C 中的代码路径?

    TraceGL 是一个非常简洁的项目 它允许 JS 程序员跟踪 Javascript 中的代码路径 它看起来像这样 我想为 Objective C 构建类似的东西 我知道运行时使跟踪方法调用变得相当容易 但是我如何跟踪控制流 例如 在上面的
  • 如何为 UIImageView 随机化器实现滑动手势

    我一直在浏览大量的教程和问题 但似乎找不到我要找的东西 我有一种感觉 我只是错过了一个简单的步骤 我仍在学习诀窍 所以请承受和我一起做这个 我正在 xcode 4 3 3 上制作图像随机化器 并且我已经能够使用按钮来随机化图像 但我希望它能
  • 隐藏选项卡栏项目并对齐其他选项卡项目

    在我的应用程序中 我有 4 个选项卡栏项目 我正在 XIB 文件中添加这 4 个选项卡栏项目 最初我必须显示 3 个选项卡栏项目 同步后我必须在我的应用程序中显示第 4 个选项卡栏项目 因此 为此 我使用以下代码隐藏第四个选项卡栏项目 se

随机推荐

  • 如何对 Leaflet JS 地图进行单元测试?

    你如何进行单元测试传单 JS maps 我真的在为同样的问题而苦苦挣扎 以下是使用 js 测试库 mocha 进行的一些测试的链接 http blog mathieu leplatre info test your leaflet appl
  • 数组参数中的数组长度

    我在读C 编程 现代方法通过 K N King 学习 C 编程语言 当前章节介绍了函数以及数组参数 据解释 可以使用如下结构来表示数组参数的长度 1 void myfunc int a int b int a int b int proto
  • 两个具有自动存储期限的不同对象在地址比较下是否可以比较相等?

    特别是 是否允许不同函数中的两个自动变量的地址比较相等 如下所示 sink c include
  • 防弹 Groovy 脚本嵌入

    我正在开发一个服务器应用程序 可以通过用户提供的 Groovy 脚本进行扩展 显然 我想确保这些脚本在非常严格的沙箱中运行 它们不能破坏核心应用程序代码或消耗太多资源以使服务器超载 我研究了各种可能性 最终的解决方案可能是这些的组合 在非常
  • 如何检查Android手机是否支持TEE?

    我读过这两篇文章 One and Two 但我还有疑问 我使用 KeyStore Android 9 生成 AES 密钥 并使用isInsideSecureHardware 检查密钥是否存在的方法isInsideSecure硬件 我得到回报
  • Python 和 Django - 如何在内存和临时文件中使用

    我需要一些在内存和临时文件中使用文件操作的示例 我搜索了很多很好的示例 教程 发现只有基本的读 写 附加操作 我需要了解如何在 Django 中读取在保存 发布 完成之前上传的文件 图像 因为Django是Python 所以我认为先了解Py
  • 更新到最新的 JQuery UI 和日期选择器导致日期选择器始终可见

    我们刚刚更新到 JQuery 1 5 2 min 和 JQuery ui 1 8 11 min 并且也在使用最新的 datepicker js 文件 我说文件是因为我们也在使用 datepicker 的一些本地化版本 在更新之前 我们使用以
  • 是否可以将异步方法声明为返回 void 以消除 CS4014 警告?

    Visual Studio 会针对此代码发出警告 因为未等待此调用 因此在调用完成之前将继续执行当前方法 static void Main string args FireAndForget lt Warning CS4014 Do som
  • 单个 SQL Server 语句是否具有原子性和一致性?

    是SQL Server中的一条语句ACID 我的意思是 给定单个 T SQL 语句 未包装在BEGIN TRANSACTION COMMIT TRANSACTION 是该语句的操作 Atomic 要么执行所有数据修改 要么不执行任何数据修改
  • __global__ 函数如何像 C/C++ 那样返回值或中断

    最近我一直在 CUDA 上进行字符串比较工作 我想知道 global 函数在找到我正在寻找的确切字符串时如何返回一个值 我的意思是 我需要包含大量线程的 global 函数来同时在一个大字符串池中查找某个字符串 并且我希望一旦捕获到确切的字
  • 验证 Rails 模型/表中的存在与 null false

    我在玩 Rails admin 时发现了一些东西 模型中定义如下的属性 在 Rails 管理中计为 必需 validates user presence true 但是 如下表 架构 迁移 中定义的属性仍算作 可选 t datetime c
  • 使用 XAML 显示滑块的值

    如何仅在单击时显示滑块的当前值 类似于工具提示 但不在鼠标悬停时 此代码为我提供了鼠标悬停时滑块的值 并显示为双值
  • 具有其他模型值的下拉菜单

    我有属于系列的产品 集合只是一个名字 产品有一个collection id 在我用于创建和编辑产品的 form 视图中 我希望有一个包含所有集合名称的下拉菜单 问题 似乎没有附属于 form for 的选择方法 我正在尝试使用 选择 方法
  • 在这种情况下,扩展原型链如何提高性能?

    我长期以来一直有一个深刻的假设prototype chains导致属性访问器的性能下降 我试图解释这一点隐藏 getter 或添加到 proto 对象中当一个快速我整理的基准结果与我的预期完全相反 这里发生了什么 我是否遗漏了一些明显的东西
  • Grails RemoteFunction 参数语法

    我正在尝试将几个参数传递给 grails 中的 RemoteFunction 但我很难正确格式化它 我想传递页面上的一段数据的值加上我刚刚跳出的文本框的值 所以在我的 onblur 中我有一些类似的内容 onblur remoteFunct
  • 蓝牙和delphi,怎么样?

    我想使用蓝牙将文件发送到设备 手机 没什么花哨的 但我不知道应该从哪里开始寻找司机 也许你们中的一个人以前使用过蓝牙 可以给我一个起点 我在 Indy 中添加了一些蓝牙支持 因为你只能 通过套接字读取 写入蓝牙 使用 Windows 套接字
  • MongoDB:更新一个字段上的每个文档

    我有一个集合名为foo假设地 每个实例foo有一个名为 lastLookedAt 的字段 它是自纪元以来的 UNIX 时间戳 我希望能够通过 MongoDB 客户端并将所有现有文档 大约 20 000 个 的时间戳设置为当前时间戳 处理这个
  • 访问 Django 模板中的 Javascript 变量

    有什么办法可以访问吗javascript变量在Django模板tags 我可以做这样的事情吗 if javascriptvar 0 do this else do this endif 不 Django 模板是在服务器端编译的 然后它被发送
  • 更改数据库/添加文件/变量文件名?

    我想将文件 文件组添加到现有数据库 但我需要从变量获取路径 因为当此脚本完成时它会有所不同 当我在 SQL Management Studio 2008 R2 中检查脚本时 它返回一个错误FILENAME Path 我该如何使用该变量 脚本
  • 如何判断 UILabel 何时被截断和/或其换行位置将发生变化

    我有一个多线UILabel numberOfLines 0 它的宽度可以在运行时改变 有时这会导致截断和 或重新包装 一些例子最好地说明了这一点 示例 1 宽度的减小导致不同的断线点 示例2 宽度减少导致截断 示例 3 宽度的减小导致截断和