【问题标题】:NSMutableAttributedString in UILabel with alternate baselineOffsetUILabel 中的 NSMutableAttributedString 与备用baselineOffset
【发布时间】:2021-09-02 14:36:40
【问题描述】:

我有一个案例,我想在UILabel 中显示某种脚注文本。文本以数字为前缀作为对应的索引。

我解决这个问题的第一个想法是简单地创建一个带有UILabel 的视图设置,用于标记和文本。然而,这涉及到很多对约束和自动布局的摆弄,因为我想在一个表格中列出所有脚注。

因此我想出了使用NSMutableAttributedString 并分别为标记和文本设置基线/字体大小的想法。生成的NSAttributedString 然后可以在任何带有UILabel 的布局中使用。

let footnote: NSMutableAttributedString = .init(string: mark, attributes: [
                .foregroundColor: UIColor.myColor,
                .font: UIFont.myFont(7),
                .baselineOffset: 10,
            ])
            disclaimer.append(.init(string: text, attributes: [
                .foregroundColor: UIColor.myColor,
                .font: UIFont.myFont(14),
            ]))

或者我是这么认为的。似乎UILabelUITableViewRow 的布局不喜欢具有交替基线的文本,因为UILabel 从未调整为超过2 行。这两条线以外的一切都被切断了。即使设置preferredMayLayoutWidth 来帮助布局一点也不奏效。它确实将标签缩放到正确的高度,但文本仍然丢失,就好像它被截断了一样。

【问题讨论】:

    标签: ios swift uikit


    【解决方案1】:

    因此,为了回答我自己的问题(并与可能遇到相同问题的人分享这些知识),我能够通过一个非常简单(诚然不是很优雅)的修复方法来解决这个问题。

    我所要做的就是在我的标记前添加一些文本,并使用修改后的baselineOffset。这样,布局似乎能够在正确渲染标记和文本的同时计算正确的高度。由于我不想在单元格中添加任何其他文本,因此我使用了 Zero-Width Space 字符。

    let footnote: NSMutableAttributedString = .init(string: "\u{200B}", attributes: [:])
                footnote.append(.init(string: mark, attributes: [
                    .foregroundColor: UIColor.myColor,
                    .font: UIFont.myFont(7),
                    .baselineOffset: 10,
                ]))
                footnote.append(.init(string: text, attributes: [
                    .foregroundColor: UIColor.myColor,
                    .font: UIFont.myFont(14),
                ]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多