在字符串的 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!

所以我终于可以完成它了,这在landscapelandscapeportrait 模式下的iPhoneiPad 的所有设备上以及iPad 上的split mode 上都运行良好!

所以我想在这里分享我的实现:

第一步:创建一个TitleView.xib文件。

第二步:拿了两个标签的Name LabelNumber 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中共享提供程序的不同数据

实体框架4.0在插入之前自动截断/修剪字符串

Symfony,Doctrine 在存储到数据库之前截断 Json 中的字符串

java 如何对中英文和符号数字混合的字符串进行截取,其中包含各种括号( ( [ < >] ) )?

UIStackView 和截断的多行 UILabel

如何在 UIStackview 中添加和删除 UILabel