Swift 中根据 String 计算出 UILabel 的大小

2024-01-01

我正在尝试根据不同的字符串长度计算 UILabel 的高度。

func calculateContentHeight() -> CGFloat{
    var maxLabelSize: CGSize = CGSizeMake(frame.size.width - 48, CGFloat(9999))
    var contentNSString = contentText as NSString
    var expectedLabelSize = contentNSString.boundingRectWithSize(maxLabelSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(16.0)], context: nil)
    print("\(expectedLabelSize)")
    return expectedLabelSize.size.height

}

上面是我用来确定高度的当前函数,但它不起作用。我将非常感谢我能得到的任何帮助。我更喜欢 Swift 中的答案,而不是 Objective C 中的答案。


使用扩展String

Swift 3

extension String {
    func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat {
        let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
        let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)
    
        return ceil(boundingBox.height)
    }

    func width(withConstrainedHeight height: CGFloat, font: UIFont) -> CGFloat {
        let constraintRect = CGSize(width: .greatestFiniteMagnitude, height: height)
        let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)

        return ceil(boundingBox.width)
    }
}

还有关于NSAttributedString(这有时非常有用)

extension NSAttributedString {
    func height(withConstrainedWidth width: CGFloat) -> CGFloat {
        let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
        let boundingBox = boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, context: nil)
    
        return ceil(boundingBox.height)
    }

    func width(withConstrainedHeight height: CGFloat) -> CGFloat {
        let constraintRect = CGSize(width: .greatestFiniteMagnitude, height: height)
        let boundingBox = boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, context: nil)
    
        return ceil(boundingBox.width)
    }
}

斯威夫特 4 和 5

只需更改值attributes in the extension String methods

from

[NSFontAttributeName: font]

to

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

Swift 中根据 String 计算出 UILabel 的大小 的相关文章

随机推荐

  • 使用正确的派生类型调用泛型方法

    我有以下场景 我有三个课程 我们称它们为A B and C 它们的共同点是它们继承自相同的接口 ISomeInterface它们是使用实体框架映射到实体的类 我有一个方法接收实现此接口的对象列表 但对象本身将是A B or C 方法外壳看起
  • 网格碰撞器在应该有孔的地方有墙壁并且变形了

    我的曲线水管模型需要一个曲线圆柱对撞机 以便我的玩家红色立方体可以轻松通过 我尝试了网格碰撞器 它不起作用 还尝试了另一种技巧 我在搅拌机中构建了 2 个模型 一个用于网格渲染 一个用于碰撞器 作为一个整体 九分之一导致网格碰撞器无法在整个
  • Gtest:“{”之前预期的类名

    我正在尝试将 Gtest 下的测试用例转换为使用测试夹具 以便在添加更多测试时可以有一个通用的设置 然而 这会导致错误 test integrate cc 4 47 error expected class name before toke
  • 使用 perl 和 Net::DNS 检查 DNS

    所以 在 有一个小脚本 参见第 173 页 其目的是迭代检查 DNS 服务器以查看它们是否为给定主机名返回相同的地址 然而 书中给出的解决方案仅当主机具有静态IP地址时才有效 如果我希望该脚本能够与具有多个关联地址的主机一起使用 我该如何编
  • jquery 相当于 getcompulatedstyle()

    我在一个中找到了这个 getCompulatedStyle polyfillJavaScript 插件 https github com viljamis responsive nav js if computed window getCo
  • 为什么根文件系统被加载到ramdisk中?

    我正在研究Linux的启动过程 我遇到过这样一句话 RAM 比软盘快几个数量级 因此 ramdisk 的系统运行速度很快 无论如何 内核都会将根文件系统加载到 RAM 中来执行它 所以我的问题是 如果内核将根文件系统加载到 RAM 中 为什
  • Twig - 获取规范标签的 URL

    我希望在我的应用程序中创建一个动态 rel canonical 标签 该标签会拉入当前 URL 但希望确保删除所有查询参数 例如http www example com test page 2 http www example com te
  • 使用 karma 进行角度单元测试时,dispatchEvent() 和 triggerEventHandler() 有什么区别?

    我正在为指令 在输入事件上调用 编写单元测试 该指令正在修改 formControl 上的输入值 我在我的规范文件中创建了一个测试组件 我注意到triggerEventHandler 和dispatchEvent 之间的区别 在trigge
  • 对“__android_log_print”的未定义引用

    我的 make 文件有什么问题 Android mk LOCAL PATH call my dir include CLEAR VARS LOCAL MODULE foo LOCAL SRC FILES foo c LOCAL EXPORT
  • 使用流有条件地填充地图 - Java 8

    我正在尝试将此 简化的 代码转换为使用 Java 8 流 Map
  • XSLT Xalan dyn:评估示例

    我希望您在样式表中使用 EXSLT DYN EVALUATE 我已添加名称pace 但我不知道需要导入的 xsl 文件在哪里 我不相信我安装了 XALAN 来指向导入 我该如何安装这个 安装后 我将其指向 xsl 它会选择该函数并应用它吗
  • 显示表,描述 redshift 中等效的表

    我是 aws 新手 谁能告诉我 redshifts 与 mysql 命令的等价物是什么 show tables redshift command describe table name redshift command 所有信息都可以在PG
  • 生成随机、唯一的值 C#

    我已经搜索了一段时间并一直在努力找到这个 我试图用 C 生成几个随机的 唯一的数字 我在用着System Random 我正在使用DateTime Now Ticks seed public Random a new Random Date
  • R studio - 我需要使用混淆矩阵的敏感性和特异性以及阳性和阴性预测值的置信区间

    我正在写一篇关于住院儿童帐单代码有效性的论文 我是一个非常新手的 R studio 用户 我需要敏感性和特异性以及阳性和阴性预测值的置信区间 但我不知道该怎么做 我的数据有 3 列 ID true value billing value 这
  • Golang 模板“减号”功能

    我知道在go我可以调用名为的模板函数add对于像这样的表达1 1 但是如何为表达式命名函数2 1 没有add默认包含的功能 但是 您可以轻松地自己编写此类函数 例如 tmpl template Must template New Funcs
  • 为什么 C++ 标准文件流没有更严格地遵循 RAII 约定?

    为什么 C 标准库使用流open close 语义与对象生命周期分离 从技术上讲 关闭销毁可能仍会生成类 RAII 但获取 释放独立性会在范围内留下漏洞 其中句柄可以指向任何内容 但仍需要运行时检查来捕获 为什么库设计者选择他们的方法而不是
  • Django 教程:运行服务器错误

    我正在遵循 django 教程 但我立即在第 1 部分中遇到了问题 运行 python manage py runserver 后 我在浏览器中输入 URL 并收到错误 ImproperlyConfigured Module django
  • 如何使用 jQuery 查找特定类型(表)的最后一个子项?

    假设我有以下结构 div table tbody tr td div table tbody tr td div table Last table here table div td tr tbody table div td tr tbo
  • 使用 Android NDK 中的系统函数在 Android 嵌入式设备上运行 Shell 脚本文件

    All 这里我想通过android NDK中的系统调用运行 sh文件 我能跑cp rm通过系统调用命令 但 sh 命令无法通过系统调用运行 我还在 android 上安装 busybox 我使用下面的代码 我设置了所有权限test sh C
  • Swift 中根据 String 计算出 UILabel 的大小

    我正在尝试根据不同的字符串长度计算 UILabel 的高度 func calculateContentHeight gt CGFloat var maxLabelSize CGSize CGSizeMake frame size width