我怎样才能迅速防止标签中的孤儿?

我有一个标签,可以有一两行。 如果它有两行,我希望第二行至less有两个(或者三个)字,而不是一个。 任何关于如何使用swift完成的想法?

提前致谢!

丹尼尔

编辑:我编辑了我愚蠢的第一个想法,没有真正的帮助。

好吧,经过多次调查,我想出了我认为是最好的解决scheme。

我写了这个函数:

 func numberOfLinesInLabelForText(text: String) -> Int { let attributes = [NSFontAttributeName : UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline)] let screenSize: CGRect = UIScreen.mainScreen().bounds let labelSize = text!.boundingRectWithSize(CGSizeMake((screenSize.width - 30), CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: attributes, context: nil) let lines = floor(CGFloat(labelSize.height) / bookTitleLabel.font.lineHeight) return Int(lines) } 

你把标签中显示的string放进去,它会给你多less行标签。 我为这个特定的标签使用dynamictypes和标题样式,因此是preferredFontForTextStyle(UIFontTextStyleHeadline)部分,但您可以将其更改为您的标签使用的字体和大小。 然后我使用(screenSize.width - 30)为我的标签的宽度,因为它的宽度是不固定的,所以我使用屏幕大小减前导和尾随。 这可能不是最优雅的解决scheme,我打开更好的build议。 其余的很简单。

有了我可以做到这一点的行数:

 func splittedString(text: String) -> String { if numberOfLinesInLabel(text) == 2 { var chars = Array(text.characters) var i = chars.count / 2 var x = chars.count / 2 while chars[i] != " " && chars[x] != " " { i-- x++ } if chars[i] == " " { chars.insert("\n", atIndex: i+1) } else { chars.insert("\n", atIndex: x+1) } return String(chars) } } 

我决定把这个string分成两半,而不仅仅是避免孤儿,而是最后一个function所做的就是这个function,但是要调整它以适应你的需要并不困难。

在那里,你有它!