我想分割我的动态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 = ""
}
}