在uilabel中拆分多行快捷的字符串

问题描述 投票:2回答:1

我想分割我的动态UILabel文本,如下所示

UILabel文字 -

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

即使是iphone或ipad的每个屏幕尺寸,每个换行符都会拆分成字符串数组。

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

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

对于UILabel中的每个换行符,无论动态屏幕大小如何,我都需要拆分字符串

arrays swift string split uilabel
1个回答
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 = ""
        }
 }
© www.soinside.com 2019 - 2024. All rights reserved.