如何在 Swift iOS 中根据 UILabel 中的条件截断字符串的中间部分?

How do I Truncate middle of String based on conditions in UILabel in Swift iOS?

提问人:Dimpy-iRoid 提问时间:7/19/2023 最后编辑:Dimpy-iRoid 更新时间:11/21/2023 访问量:42

问:

我有一个这样的字符串: AU 6,7,8,9,10,11,...,20,21,22,23,24,25 参考此图片

我只需要填充 8 种尺寸。这个尺寸没有限制,它们也可以超过 20 或 50。 如果只有 8 种尺寸可用,请显示 AU 6、7、8、9、10、11、12、13 如果超过 8 个尺寸,则显示 AU 6、7、8、9、10、11 ...25.仅在最后尺寸前面有三个点。

我给 UILabel 提供了 1 行数,Link Break 是 Truncate Middle。

我是 swift 的新手,我不知道如何实现这一目标?我将不胜感激您的帮助。谢谢!

iOS Swift 字符串 UILABEL 截断

评论

0赞 Sweeper 7/19/2023
“填充 8 个字符”是什么意思?“AU 6、7、8、9、10、11、12、13”的字符数比 8 多得多。另外,当尺寸少于 8 种时会发生什么?
0赞 Dimpy-iRoid 7/19/2023
我只需要在 UILabel 中显示 8 个字符,如下所示:AU 6、7、8、9、10、11、12、13(我的意思是 8 个数字除了 AU、6、7、8 等是尺寸,我只需要显示 8 个尺寸)如果超过 8 个尺寸,则显示 AU 6、7、8、9、10、11 ...25.仅在最后尺寸前面有三个点。

答:

0赞 lazarevzubov 7/19/2023 #1

我认为仅通过SwiftUI无法实现该要求。从大小数组(整数)中生成字符串的算法应该会有所帮助。例如:

func makeSizesString(sizesArray: [Int]) -> String {
  if (sizesArray.count <= 8) {
    sizesArray.map { "\($0)" }.joined(separator: ", ")
  } else {
    sizesArray[...5].map { "\($0)" }.joined(separator: ", ") + " ... \(sizesArray[sizesArray.count - 1])"
  }
}

print(makeSizesString(sizesArray: [1, 2, 3, 4, 5, 6, 7])) // 1, 2, 3, 4, 5, 6, 7
print(makeSizesString(sizesArray: [1, 2, 3, 4, 5, 6, 7, 8])) // 1, 2, 3, 4, 5, 6, 7, 8
print(makeSizesString(sizesArray: [1, 2, 3, 4, 5, 6, 7, 8, 9])) // 1, 2, 3, 4, 5, 6 ... 9
print(makeSizesString(sizesArray: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) // 1, 2, 3, 4, 5, 6 ... 10

评论

1赞 Dimpy-iRoid 7/19/2023
这正是我想要的。真的很感谢你的时间。谢谢!
0赞 lazarevzubov 7/19/2023
NP的。祝您编码愉快。