Skip to content

$100美刀 有偿征集解决方案 TextKit与UILabel内容同步问题 #12

Open
@lixiang1994

Description

@lixiang1994

完美解决此问题, 以$100美刀作为酬谢, 支持 微信支付, 支付宝支付, PayPal支付.

  • 解决上述问题, 确保自测无误.
  • 提交PR或直接联系本人交付相关代码.
  • 本人验证通过测试.
  • 2小时内根据以上支付方式支付酬谢金.
  • Release记录 以示感谢🙏

描述:

本库对于 UILabel 的点击事件实现方案是使用 TextKit 构建一个与 UILabel 显示一致的内容, 通过TextKit计算出所点击的字符.

问题:

由于UILabel的特殊性, 导致TextKit无法构建出一个完全匹配的内容, 在某些情况下总会存在误差.

比如 富文本中 存在中英文不同字体混合的情况, 最终显示会不一致.

目前进展:

UILabel 真实的NSAttributedString对象的获取已解决, 可以肯定的是目前得到的NSAttributedString对象是准确无误的. 无需再考虑这方面的问题.

通过各种实践已知 TextKitUILabel的行高计算策略不同, 导致相同的NSAttributedString对象实际渲染后显示的不一样.

已经尝试使用Neat的方案解决, Neat本身存在很多问题, 比如富文本中包含NSTextAttachment Neat 就会出现问题, 幸运的是 这个问题我已经解决了.
其他问题目前还没有解决, 比如 numberOfLines会导致计算出错.
Neat的方案是否真正可靠还是个未知数, 但最起码它是目前最接近成功的一种方案, 你可以考虑继续使用Neat的方案走下去, 也可以另辟蹊径.

如何进行测试:

目前该分支内已经包含了调试代码.
CheckingViewController.swift文件中, 点击label后 会创建一个DebugView添加到UILabel上, DebugView上显示的内容由TextKit绘制, 如果所显示的内容完全重合 则表示通过, 如果出现不一致的情况 则表示不通过.

例子:

debug

通过:

success

不通过:

failure

分支地址

调试页面:
image

相关类:
image

Metadata

Metadata

Assignees

No one assigned

    Labels

    $100paid helphelp wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions