Arrays 在uilabel中拆分字符串多行swift

Arrays 在uilabel中拆分字符串多行swift,arrays,swift,string,split,uilabel,Arrays,Swift,String,Split,Uilabel,我想拆分我的动态UILabel文本,如下所示,例如 UILabel文本- 能力倾向测试与你的要求相关的英语技能。它使组织/机构能够评估所有四项英语技能——阅读、写作、听力和口语以及核心必修部分(语法和词汇),或者只测试一项技能,例如阅读 将每一行拆分为字符串数组,在屏幕大小的每个维度上实现盈亏平衡,无论是iphone还是ipad 我想要的结果是字符串数组- [“能力倾向测试与您的要求相关的英语技能。它使组织/机构能够”“评估所有四项英语技能-阅读、写作、听力和口语以及核心”“必修部分(语法和词汇

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

UILabel文本-

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

将每一行拆分为字符串数组,在屏幕大小的每个维度上实现盈亏平衡,无论是iphone还是ipad

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

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


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

您的方法可能很难,相反,我建议您使用其他方法,如使用
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 = ""
        }
 }
let inputText=“能力倾向测试与您的要求相关的英语技能。它使组织/机构能够评估所有四项英语技能——阅读、写作、听力和口语以及核心必修部分(语法和词汇),或者只测试一项技能,例如阅读。”
让labelWidth=UIScreen.main.bounds.width
var resultArray:[字符串]=[]
var readerString=“”
对于0中的i..=labelWidth{
resultArray.append(readerString)
readerString=“”
}
}

您真的相信
inputText
真的是一个数组,可以根据循环将其元素分配给
readerString
。你有没有在操场上测试过这个问题?这里有几个字符串扩展,你可以使用它们来获得这个行为,我没有把它们粘贴在这里,因为它们与你的问题无关。请查看此链接,它可能会帮助您:[link]()