NSAttributedString 文本始终以较大的 lineHeight 粘在底部

2023-12-26

我正在尝试实现来自 Sketch 的按设计标签,例如我需要字体大小 = 19 和行高 = 50 的文本样式。所以我最终使用NSAttributedString with NSMutableParagraphStyle但因文本粘在底部的问题而停止UILabel

我已经尝试过使用lineHeightMultiple and lineSpacing但这些并没有给我想要的行高,所以我最终使用了minimumLineHeight and maximumLineHeight等于相同

这是我的方法NSAttributedString

    private static func makeAttributedString(
        with attributes: TextAttributes,
        text: String? = nil,
        alignment: NSTextAlignment = .center
    ) -> NSAttributedString {
        let font = UIFont(name: attributes.font.rawValue, size: attributes.fontSize)!

        let paragraph = NSMutableParagraphStyle()
        paragraph.alignment = alignment
        paragraph.paragraphSpacing = attributes.paragraph
        paragraph.minimumLineHeight = attributes.lineHeight // equal 50 in my case
        paragraph.maximumLineHeight = attributes.lineHeight // equal 50 in my case

        let attributes: [NSAttributedStringKey: Any] = [
            NSAttributedStringKey.paragraphStyle: paragraph,
            NSAttributedStringKey.foregroundColor: attributes.textColor,
            NSAttributedStringKey.kern: attributes.kern,
            NSAttributedStringKey.font: font
        ]

        return NSAttributedString(string: text ?? "", attributes: attributes)
    }

我期望结果与设计类似

但实际上得到

注意:将高度限制设置为 50 不适用,因为我还需要多行标签,但它们存在相同的错误


看来我自己找到了一些解决方法,也许会对某人有所帮助。

该方法是关于设置baselineOffset,如下所示:

NSAttributedStringKey.baselineOffset: (attributes.lineHeight - font.lineHeight) / 4

像魅力一样工作:

https://i.stack.imgur.com/KS6k0.png https://i.stack.imgur.com/KS6k0.png

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

NSAttributedString 文本始终以较大的 lineHeight 粘在底部 的相关文章

  • 为 CocoaPods 插件设置 Xcode

    我正在尝试设置终端 Xcode 以便正确工作Xcode CocoaPods 插件 https github com kattrali cocoapods xcode plugin 当我从插件运行集成 cocoapods 选项时 我收到一条消
  • 如何在 flutter 插件的 Swift 编写的 iOS 部分中使用 Objective-C 框架

    In a 颤振插件 我想用一个Objective C我的框架iOS部分用swift编写 然后将其用于使用 Swift 的 Flutter 项目作为 iOS 语言 经过一些研究 我不是 iOS 开发人员 后 我发现我想要做的事情可以通过导入文
  • UIButton 不响应 UITableViewCell 中的单击事件

    ios 中有一个黑暗巫术阻止我的按钮被点击 如果我不向 uitableviewcell 添加按钮 并且单击该按钮 则会触发该事件 但如果按钮在 uitableviewcell 中 它不会被触发 看起来表 我已经准备好了示例代码 如果你们可以
  • 在 Swift 中使用模板键入别名声明

    如何避免函数中多余的限制声明f0 f1 f10 class SomeClass
  • 在 iPad 上运行时,不会触发 Mobile Safari 中即将发生的选项卡切换的 Pagehide 事件

    众所周知 Mobile Safari 在以下情况下会暂停网页上的 Javascript 执行 您切换到不同的浏览器选项卡 切换到不同的 iOS 应用程序 例如 当您接到来电时 手机应用程序 您可以订阅窗口 页面隐藏 and 页面展示 事件来
  • 在单个 MTLRenderCommandEncoder 中使用多个渲染管道:如何同步 MTLBuffer?

    中心议题我在一个渲染命令编码器中有两个渲染管道 第一个管道写入第二个管道中使用的缓冲区 这似乎不起作用 我预计这是一个同步问题 当我为每个渲染管道使用一个单独的渲染命令编码器时 我得到了所需的结果 可以使用一个渲染命令编码器来解决这个问题
  • 使用 NSPredicate 来检测 NOT CONTAINS

    我放弃 我已经尝试了我能想象到的所有组合来检查一个字符串是否包含另一个字符串 这是描述我想要做的事情的直观语法示例 NSPredicate pPredicate NSPredicate predicateWithFormat NOT K C
  • 与在后台运行应用程序的一台设备进行多点连接

    我想使用多点连接框架连接 2 台设备 其中一台设备在后台运行应用程序 就像 Firechat 一样 我无法确认这是否有效 我已将其安装在 iPhone 5S 和 4 上 但是他们只是找不到彼此 但我在某处读过这有效 实现这一目标的最佳方法是
  • TabBarController:以不同方向定向视图

    我无法保持当前的观点方向 在下面的设置中 我能够将第一个视图控制器锁定为纵向 将第二个视图控制器锁定为横向或纵向 但是 当我向选项卡控制器添加第二个导航控制器 rootviewcontroller 时 整个项目中的所有视图都将变为横向和纵向
  • 在 Interface Builder 中启用/禁用 NSLayoutConstraints

    NSLayoutConstraint in iOS 8 0 has a BOOL属性称为active这使得动态禁用 启用所述布局约束变得容易 要为视图控制器创建第二个布局集 然后我可以以编程方式启用 禁用它 通过IBOutletCollec
  • 推送通知中的设备令牌

    我只想向某些用户发送推送通知 根据我在苹果文档中所经历的内容 注册推送通知的代码是这样的 void applicationDidFinishLaunching UIApplication app other setup tasks here
  • 搜索结果中的 Swift 搜索结果控制器连接到另一个视图控制器

    Problem 我有一个表格视图 用户可以滚动查找某些内容或使用搜索栏 搜索栏不是使用 StoryBoard 创建的 我的观点有一个UISearchController处理搜索栏和搜索结果更新 我遇到的问题是 自从我SearchResult
  • 获取 iOS Swift 中 UIViewController 的所有列表

    有没有办法获取 iOS Swift 项目中的所有 UIViewController 我想获取所有 UIViewController 的数组并检查特定的 UIViewController 是否存在 我必须找到项目中是否存在特定的 UIView
  • iOS 有没有办法通过按钮调整图像大小?

    如下图所示 按钮的图像跨越了按钮边界 有没有办法通过故事板或以编程方式使图像适合按钮的边界 更改按钮Style from Plain to Default 这是一个限制为60 x 60 with a 80 x 80图像与Style Plai
  • 如何通过 swift 包管理器在 swift 项目中添加 Alamofire [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在探索 SPM 现在我需要知道如何在我的项目中通过 SPM 导入 Alamofire 创建一个名为的 swift 文件Package在你
  • Swift 3 Web 视图

    所以我刚刚更新到新的Xcode8 and Swift3但现在我的网络视图不起作用 这是我使用的代码 UIWebView loadRequest webView NSURLRequest URL NSURL string http hardw
  • 如何模拟应用程序在后台被杀死?

    我试图验证我的应用程序 App1 在启动另一个应用程序 App2 后被系统关闭时行为是否正确 有什么方法可以模拟或强制这种行为吗 在 App2 运行时告诉模拟器模拟内存警告不会执行任何操作 直到 App1 返回前台为止 从调试器中杀死 Ap
  • 免费套餐于今天 11 月 28 日结束,Heroku 网站于今天删除 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我的 Heroku 网站已被删除 因为我没有切换到付费计划 我刚刚切换到 Eco Dyno 我的网站会自动恢复还是需要重建 注意 使用 He
  • Swift 中的 id 相当于什么?

    我有两个这样的代表 protocol MyFirstDelegate func change value int protocol MySecondDelegate weak var delegate MyFirstDelegate 这些协
  • 无效的 Swift 支持 - 文件位置不正确

    我一直在尝试将新版本上传到 iTunes Connect 来更新应用程序 我第一次使用 xCode 6 但收到了一封来自 Apple 的电子邮件 内容如下 亲爱的开发者 我们发现您最近交付的 应用程序 存在一个或多个问题 要处理您的交货 必

随机推荐

  • 函数内部指针赋值

    我实际上无法弄清楚我在这里做错了什么 所以基本上我有一个对象指针 我将其传递给函数以将其值设置为指向新的对象实例 但它似乎不起作用 我无法解决原因 下面是我正在尝试做的事情的代码示例 GetPointer Object pointer po
  • C# 中变量之间的歧义

    首先我想说我首先进行了搜索 并在其他各种事情上发现了很多类似的问题 但不完全是这个问题 我有这个代码 namespace New Game GameClasses
  • 熊猫发现缺失的 15 分钟间隔

    我有一个数据框 df pd DataFrame customerId A A A A A A A B B B B B B B B B startOf15Min 2019 07 30T00 00 00 2019 07 30T00 15 00
  • BlackBerry OTA 安装的内容类型

    对于 BlackBerry OTA 安装 jad 和 cod 文件应使用什么内容类型 From http www oracle com technetwork systems index 139239 html http www oracl
  • 使用 json_annotation 包可序列化 Flutter JSON 如何将 JsonConverter 与 Firebase Firestore DocumentReference 结合使用

    我正在尝试使用 JSON 可序列化和自定义 JsonConverter 在模型中保存 DocumentReference 但没有正确执行 这是我的模型 DocumentSerializer DocumentReference recentT
  • 通过调用带参数的URL获取json对象

    这看起来是一个简单的问题 但我有一个编码员的心理障碍 这个概念 我输入一个 URL 即 www mysite com getStuff name Jerry ocupation Engineer Id 12345 我不想返回网页或其他内容
  • 在 C++ 代码中初始化 C 结构

    有没有更好的方法在 C 代码中初始化 C 结构 我可以在变量声明点使用初始化列表 但是 如果所有参数在编译时未知 或者如果我没有声明本地 全局实例 则这没有那么有用 例如 声明该结构的遗留 C 代码 并且还有使用它的 API typedef
  • 数据库设计 - 空字段[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前正在与我的开发团队讨论一个问题 他们认为空旷的田地是个坏消息 例如 如果我们有一个客户详细信息表 用于存储来自不同国家 地区的客户数据 并
  • Datastax:重新准备已准备好的查询警告

    我有这个代码 UUID notUuid UUIDs timeBased PreparedStatement pstmt cqlSession prepare INSERT INTO mytable userId notifId notifi
  • 如何使用GSON将json文件解析为java POJO类

    我正在使用 GSON 解析 JSON 文件 并且想将此 JSON 对象映射到 POJO 类 问题是 JSON 中的属性名称没有驼峰式大小写 但我的 java POJO 对象具有驼峰式大小写属性名称 有没有什么想法不会影响性能 例如 JSON
  • 更新 GAC dll

    我在 GAC 中注册了一个 DLL 其中有一个错误 v4 2 0 因此 我修复了该错误 仅更新了文件版本 v4 2 1 保留程序集版本 v4 2 0 并构建了一个新的 MSI 包 问题是 DLL 没有安装在 GAC 中 我通过右键单击 DL
  • 使结构体变得易失性是否会使其所有成员都易失性?

    如果我有 struct whatever int data volatile whatever test will test data也会波动吗 可以提出另一个问题 或者只是用另一种方式来看待原始问题 是否制作一个结构体const使其所有成
  • 为当前的下一行数据编写脚本

    如果我想复制下一行的数据该怎么办 例如 客户 A 于 2015 年 1 月 1 日开始当前行程 下一次行程于 2015 年 1 月 15 日开始 因此 他当前行程的结束日期将为 2015 年 1 月 14 日 即下一次行程开始的前一天 我可
  • Spring REST 错误处理:无法获取我的自定义消息

    我读了几篇关于服务器端错误处理的文章 教程 我只想用我的自定义消息返回一个 http 错误代码 当然这是行不通的 我在 javascript 回调中始终得到的结果是以下消息
  • Visual Studio 2005 Designer 未将控件添加到 aspx.Designer.cs

    我不是 Designer 的粉丝 我更喜欢直接在 ASPX 页面上编码 然而 自从重新格式化 并导致重新格式化 以来 designer cs手动编码到 aspx 文件时 文件未正确更新 这意味着我的代码隐藏 http en wikipedi
  • 让Python忽略.pyc文件

    有没有办法让 Python 忽略任何存在的 pyc 文件并始终直接解释所有代码 包括导入的模块 谷歌还没有找到任何答案 所以我怀疑没有 但为了以防万一 似乎值得一问 为什么我要这样做 我有一个大型 Python 脚本管道 这些脚本在数百台计
  • 编译 C 程序时体系结构 x86_64 的未定义符号[重复]

    这个问题在这里已经有答案了 我有一个简单的程序演示 use c include libhello h int main void hello return 0 libhello h void hello void libhello c in
  • Java 中的 PrintWriter 或任何其他输出流不知道“\r\n”

    我在使用 PrintWriter 或任何其他输出流在服务器和客户端程序之间发送消息时遇到问题 如果我使用 println abc 进行通信 它可以正常工作 但是如果我使用 print abc r n print abc n 或 print
  • Objective-C 中的自动释放池 - 释放主 AutoreleasePool?

    根据我的理解 当一个对象被发送时autorelease消息 如果除中的自动释放池之外不存在自动释放池main m 该对象被放置在main m 假设这是正确的 我有几个问题 1 所有自动释放的对象是否都会保留在该池中直到应用程序终止 2 如果
  • NSAttributedString 文本始终以较大的 lineHeight 粘在底部

    我正在尝试实现来自 Sketch 的按设计标签 例如我需要字体大小 19 和行高 50 的文本样式 所以我最终使用NSAttributedString with NSMutableParagraphStyle但因文本粘在底部的问题而停止UI