[BUG]如果.image不设置placeholder,高度计算会出错。 即使最终展示相同

#73 · closed · 2 comments

View on GitHub ↗

hstdt

复现代码 ```swift let url = URL(string: "https://avatars.githubusercontent.com/u/13112992?s=400&u=bb452b153d9d5342877ebd8179b04fbbae41f3d0&v=4") let array: [ASAttributedString] = [ .init( """ This is a remote image URL -> \(.image(url, placeholder: UIImage(named: "placeholder"), .proposed())) """, .paragraph(.alignment(.center)) ), .init( """ This is a remote image URL -> \(.image(url, .proposed())) """, .paragraph(.alignment(.center)) ) ] array.forEach { let height = $0.value.boundingRect( with: .init( width: UIScreen.main.bounds.width - 20, height: .greatestFiniteMagnitude ), options: [ .usesLineFragmentOrigin, .usesFontLeading ], context: nil ).integral.size.height print(height) } ``` <img width="1782" height="907" alt="Image" src="https://github.com/user-attachments/assets/97dd7b7a-e4df-433f-a696-19c7a851f89f" />

Comments

lixiang1994

你传入的是url, 是需要异步加载图片的, 所以不会立刻有高度..

hstdt

我可能没有描述清楚。 实际场景里面,通过TextView+AutoLayout组成Cell, 在没有设置placeholder的情况下,TextView的Intrinsic Content Size异常大(比如这里正常是14, 实际上变成了51)导致Cell被撑开。后续发现设置一下placeholder就能解决问题。 计算高度倒不是问题,因为只是这里的计算高度和Intrinsic Content Size的高度是一致的,所以反馈里面用了这个方法更直观。 在下载过程中/下载失败的情况下,高度会是一个奇怪的高度。 <img width="1677" height="706" alt="Image" src="https://github.com/user-attachments/assets/1263f069-a750-443b-92ce-8697e4419daf" /> 在没有缓存的情况下,即使下载成功,高度也不会更新 <img width="1798" height="825" alt="Image" src="https://github.com/user-attachments/assets/9383fe81-03cd-4347-b321-7fc5ba5e22f3" /> 但是这些问题都可以通过设置placeholder解决, 所以我觉得可能算是一个bug。