【问题标题】:Split string in uilabel multiple lines swift快速拆分uilabel中的字符串多行
【发布时间】:2019-02-21 12:45:54
【问题描述】:

我想像下面给出的那样拆分我的动态 UILabel 文本,例如

UILabel 文本 -

能力倾向测试与您的要求相关的英语技能。它使组织/机构能够评估所有四种英语技能——阅读、写作、听力和口语以及核心必修部分(语法和词汇),或仅测试一项技能,例如阅读。

将每个换行符拆分为字符串数组,即使屏幕尺寸的每个维度(无论是 iphone 还是 ipad )。

我想要的结果是字符串数组 -

[“能力测试与您的要求相关的英语技能。它使组织/机构”,“评估所有四种英语技能——阅读、写作、听力和口语以及核心”,“强制性部分(语法和词汇) ) 或只测试一项技能,例如阅读。"]

UILabel 中的每个换行符我都需要拆分字符串,而不管动态屏幕大小如何

【问题讨论】:

    标签: arrays swift string split uilabel


    【解决方案1】:

    您的方法可能很难,我建议您使用其他方法,例如使用 sizeWithAttributes

    extension String {
    
    func widthOfString(usingFont font: UIFont) -> CGFloat {
        let fontAttributes = [NSAttributedString.Key.font: font]
        let size = self.size(withAttributes: fontAttributes)
        return size.width
    }
    
    func heightOfString(usingFont font: UIFont) -> CGFloat {
        let fontAttributes = [NSAttributedString.Key.font: font]
        let size = self.size(withAttributes: fontAttributes)
        return size.height
    }
    
    func sizeOfString(usingFont font: UIFont) -> CGSize {
        let fontAttributes = [NSAttributedString.Key.font: font]
        return self.size(withAttributes: fontAttributes)
        }
    }
    

    假设您知道标签中的宽度和字体大小,您可以使用如下逻辑:

        let inputText = "Aptitude tests English skills relevant to your requirements. It enables an organisation / institution to assess all four English skills – reading, writing, listening and speaking together with the core mandatory component (grammar and vocabulary) or test just one skill, e.g. reading."
        let labelWidth = UIScreen.main.bounds.width
        var resultArray:[String] = []
        var readerString = ""
        for i in 0 ..< inputText.count
        {
    
            readerString += inputText[i]
            //Check if overflowing boundries and wrapping for new line
            if readerString.widthOfString(usingFont: UIFont.systemFont(ofSize: 14)) >= labelWidth {
                resultArray.append(readerString)
                readerString = ""
            }
     }
    

    【讨论】:

    • 你真的相信inputText真的是一个可以根据循环将它的元素赋值给readerString的数组吗?你有没有在操场上测试过这个?
    • 您可以使用几个字符串扩展来获得这种行为,我没有将它们粘贴到这里,因为它们与您的问题无关。看看这个可能对你有帮助的链接:[link] (stackoverflow.com/questions/24092884/…)
    猜你喜欢
    • 2015-11-04
    • 2019-04-30
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多