lixiang1994 / AttributedString

基于Swift插值方式优雅的构建富文本, 支持点击长按事件, 支持不同类型过滤, 支持自定义视图等.
MIT License
846 stars 76 forks source link

挺喜欢这个库,但是使用的时候遇到了一些问题 #52

Open yzjzmn opened 1 year ago

yzjzmn commented 1 year ago

3.3.3版本性能问题,加载多条会明显卡顿

iOS12使用action会crash

title包含emjio表情通过索引匹配不准确

lixiang1994 commented 1 year ago

iOS12使用action会crash 在3.3.4版本中已修复 其他问题我看一下

lixiang1994 commented 1 year ago

3.3.3版本性能问题,加载多条会明显卡顿 具体从哪方面体现的?

lixiang1994 commented 1 year ago

title包含emjio表情通过索引匹配不准确这个也麻烦提供一下示例 🙏🏻

yzjzmn commented 1 year ago

Table列表中大量使用ASAtteibutedString,会卡顿

因为之前12.0系统添加action有crash,于是升级了pods版本到3.3.3,于是反应会卡顿

然后通过instruments定位到问题在设置label.attributed.text,后来pod版本切回2.2.2版本,卡顿明显消失

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: LEE @.> 发送时间: 2022年10月12日 11:20 收件人: lixiang1994/AttributedString @.> 抄送: YangZJang @.>, Author @.> 主题: Re: [lixiang1994/AttributedString] 挺喜欢这个库,但是使用的时候遇到了一些问题 (Issue #52)

3.3.3版本性能问题,加载多条会明显卡顿 具体从哪方面体现的?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

yzjzmn commented 1 year ago

 抱歉,这个是别的同事反馈的问题,描述不准确,包含emoji的文本,通过Range添加参数之后,文本会被替换成⍰,应该是emoji版本不对的问题

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: LEE @.> 发送时间: 2022年10月12日 11:20 收件人: lixiang1994/AttributedString @.> 抄送: YangZJang @.>, Author @.> 主题: Re: [lixiang1994/AttributedString] 挺喜欢这个库,但是使用的时候遇到了一些问题 (Issue #52)

title包含emjio表情通过索引匹配不准确这个也麻烦提供一下示例 🙏🏻

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

propertyChen commented 1 year ago

同样的两个问题,我这边的情况是

  1. 语音社交类应用,房间聊天列表信息有大量富文本, 用户a 赠与用户b 礼物【礼物图片】 这 5段富文本拼接,当大量出现的时候会很卡, 现在我不用三方,自己写富文本很流畅,后续有空我再弄个demo上来
  2. 有部分emoji 不能识别,会被截半,显示⍰
lixiang1994 commented 1 year ago

同样的两个问题,我这边的情况是

  1. 语音社交类应用,房间聊天列表信息有大量富文本, 用户a 赠与用户b 礼物【礼物图片】 这 5段富文本拼接,当大量出现的时候会很卡, 现在我不用三方,自己写富文本很流畅,后续有空我再弄个demo上来
  2. 有部分emoji 不能识别,会被截半,显示⍰

麻烦了🙏🏻

yzjzmn commented 1 year ago

关于字符串包含emoji使用NSRange出现乱码问题,最终查到Swift的count返回的只是Unicode字符个数,所以在去长度和下标的时候 要用 string.utf16.count 具体参考:https://blog.csdn.net/song_bin/article/details/123855303

yzjzmn commented 1 year ago

另外发现在富文本中添加段落不生效的问题,这是我的使用方式: let protocolAttri: ASAttributedString = .init(string: RString.loginOfTermsOfService(), .foreground(UIColor(hex: 0x2DCDFF)), .action([.foreground(UIColor(hex: 0x2DCDFF))]) { [weak self] in self?.clickProtocolAction() }) let tempText: ASAttributedString = .init(string: RString.loginOfAnd()) let policyAttri: ASAttributedString = .init(string: RString.loginOfPrivacyPolicy(), .foreground(UIColor(hex: 0x2DCDFF)), .action([.foreground(UIColor(hex: 0x2DCDFF))]) { [weak self] in self?.clickPolicyAction() }) var showTitle = protocolAttri + tempText + policyAttri showTitle.add(attributes: [.paragraph(.lineSpacing(6), .alignment(.left), .minimumLineHeight(22)), .font(PingFangSC.regular.size(14))])

最终showTitle添加段落并不生效

yzjzmn commented 1 year ago

同样的两个问题,我这边的情况是

  1. 语音社交类应用,房间聊天列表信息有大量富文本, 用户a 赠与用户b 礼物【礼物图片】 这 5段富文本拼接,当大量出现的时候会很卡, 现在我不用三方,自己写富文本很流畅,后续有空我再弄个demo上来
  2. 有部分emoji 不能识别,会被截半,显示⍰

使用range的时候计算长度和下标用string.utf16.count就可解决

lixiang1994 commented 1 year ago

👍🏻👍🏻👍🏻👍🏻👍🏻 晚些我会发布新版本, 非常感谢 @yzjzmn

lixiang1994 commented 1 year ago

@yzjzmn @propertyChen 方便提供一些emoji的示例吗? 我看了一下内部使用的都是NSAttributedStringNSRange, 似乎不存在string.count的问题

lixiang1994 commented 1 year ago
image
yzjzmn commented 1 year ago
image

如你的代码: var string: ASAttributedString = "1111😄😄😄2222" string.add(attributes: [.action(action), RSRange:(RSRange(4,3))])

因为使用了Range(4,3) 这三个😄符号会变成⍰,因为很多创建Range的时候会用到String.count计算下标和长度

关于字符串包含emoji使用NSRange出现乱码问题,最终查到Swift的count返回的只是Unicode字符个数,所以在去长度和下标的时候 要用 string.utf16.count 具体参考:https://blog.csdn.net/song_bin/article/details/123855303

lixiang1994 commented 1 year ago
image

如你的代码: var string: ASAttributedString = "1111😄😄😄2222" string.add(attributes: [.action(action), RSRange:(RSRange(4,3))])

因为使用了Range(4,3) 这三个😄符号会变成⍰,因为很多创建Range的时候会用到String.count计算下标和长度

关于字符串包含emoji使用NSRange出现乱码问题,最终查到Swift的count返回的只是Unicode字符个数,所以在去长度和下标的时候 要用 string.utf16.count 具体参考:https://blog.csdn.net/song_bin/article/details/123855303

我还是没复现出来

image image