在字符串的 5 个字符之前截断 UILabel 文本
Posted
技术标签:
【中文标题】在字符串的 5 个字符之前截断 UILabel 文本【英文标题】:Truncate UILabel text before 5 character of string 【发布时间】:2018-08-16 09:47:30 【问题描述】:是否可以根据屏幕尺寸和不同的设备方向例如在自动布局中截断字符串的 5 个字符之前的 UILabel 文本。
测试测试测试测试测试...*1234
我知道UILabel
可能有几个lineBreakMode
,例如.byTruncatingTail, .byTruncatingMiddle etc.
,但对我的情况没有任何作用。任何建议将不胜感激。
【问题讨论】:
是的,找到你的字符串并计算前 5 个字符的位置。并在该索引处添加“\n”。可能对你有帮助 【参考方案1】:感谢上面的每一次答案和cmets!
所以我终于可以完成它了,这在landscape
和landscape
和portrait
模式下的iPhone
和iPad
的所有设备上以及iPad 上的split mode
上都运行良好!
所以我想在这里分享我的实现:
第一步:创建一个TitleView.xib文件。
第二步:拿了两个标签的Name Label
和Number Label
。
第 3 步:给定两个标签的以下约束:
名称标签约束: 名称标签换行符:截断尾部: 数字标签约束:第四步:
然后在viewDidLoad
方法中加载xib:
override func viewDidLoad()
super.viewDidLoad()
let titleView = Bundle.main.loadNibNamed("TitleView", owner: self, options: nil)?[0] as! TitleView
self.navigationItem.titleView = titleView
【讨论】:
【参考方案2】:您可以通过处理字符串索引来非常优雅地完成您的要求。如果您打算在代码中的几个位置执行此操作,请考虑在 String
上创建一个 extension
,以使其更易于重用。还可以考虑使用省略号 (…
) 而不是三个句点。
extension String
func truncated(after count: Int) -> String
let truncateAfter = index(startIndex, offsetBy: count)
guard endIndex > truncateAfter else return self
return String(self[startIndex..<truncateAfter]) + "…"
Try it yourself
【讨论】:
以上是关于在字符串的 5 个字符之前截断 UILabel 文本的主要内容,如果未能解决你的问题,请参考以下文章
UIActivityViewController中共享提供程序的不同数据
Symfony,Doctrine 在存储到数据库之前截断 Json 中的字符串