【问题标题】:Truncate UILabel text before 5 character of string在字符串的 5 个字符之前截断 UILabel 文本
【发布时间】:2018-08-16 09:47:30
【问题描述】:

是否可以根据屏幕尺寸和不同的设备方向例如在自动布局中截断字符串的 5 个字符之前的 UILabel 文本。

测试测试测试测试测试...*1234

我知道UILabel 可能有几个lineBreakMode,例如.byTruncatingTail, .byTruncatingMiddle etc.,但对我的情况没有任何作用。任何建议将不胜感激。

【问题讨论】:

  • 是的,找到你的字符串并计算前 5 个字符的位置。并在该索引处添加“\n”。可能对你有帮助

标签: ios swift string uilabel swift4.2


【解决方案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

    【讨论】:

      猜你喜欢
      • 2012-12-04
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2011-07-09
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多