有時需要UILabel的文字左右兩邊對齊。比如這樣:
圖中的“時間”等中間要有一定的間距捐凭,以達到冒號對齊的效果。
簡單列下UILabel文字對齊的系統(tǒng)樣式:
public enum NSTextAlignment : Int {
case left = 0 // Visually left aligned
case center = 1 // Visually centered
case right = 2 // Visually right aligned
case justified = 3 // Fully-justified. The last line in a paragraph is natural-aligned.
case natural = 4 // Indicates the default alignment for script
}
好像都不能滿足需求民逼。
大部分場景下我想都可以用手動打空格的方式來處理霍殴,雖然笨但很方便棚赔、有效帝簇。可是有些時候你會遇到一些問題:
a) 你要對齊文字的寬度是動態(tài)變化的靠益,沒辦法手動打空格滿足所有的寬度丧肴;
b) 你要對齊的文字的寬度雖然是固定的,但文字中夾雜著數(shù)字胧后、英文和漢字芋浮,你可能怎么打空格寬度都和它對不齊。
那么就得稍微麻煩點壳快,設(shè)置下字間距了纸巷。其實也很簡單,主要的代碼就兩行而已眶痰,示例代碼如下:
// 假設(shè)label的寬度為50
let labelW: CGFloat = 50
let text = "時間"
// size函數(shù)是對boundingRect方法的簡單封裝瘤旨,用來獲取text正常顯示情況下的size,大家肯定都知道竖伯,就不展開了存哲。
let textW = text.size(font: font(15)).width
/**********就這兩行主要代碼*********/
// *計算字間距*
let kern = (labelW - textW) / CGFloat(text.count - 1)
// *設(shè)置字間距*
let ats = [NSAttributedString.Key.kern : kern]
/********************************/
let label = UILabel(frame: CGRect(x: 0, y: 0, width: labelW, height: 20))
label.attributedText = NSAttributedString(string: text, attributes: ats)
當(dāng)然因宇,可能更實際的需求是只設(shè)置某部分文字的字間距,達到部分文字對齊的效果祟偷,就像圖1中的效果一樣察滑,只要設(shè)置冒號之前的字間距使冒號對齊就好。那么也很簡單修肠,根據(jù)自己的需求在設(shè)置屬性的時候也設(shè)置下range就好了贺辰。