美文网首页iOS常用
UILabel文字左右两边对齐的问题

UILabel文字左右两边对齐的问题

作者: 问问你是谁 | 来源:发表于2020-05-21 17:58 被阅读0次

    有时需要UILabel的文字左右两边对齐。比如这样:


    图1.左右两边对齐.png

    图中的“时间”等中间要有一定的间距,以达到冒号对齐的效果。

    简单列下UILabel文字对齐的系统样式:

    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) 你要对齐文字的宽度是动态变化的,没办法手动打空格满足所有的宽度;
    b) 你要对齐的文字的宽度虽然是固定的,但文字中夹杂着数字、英文和汉字,你可能怎么打空格宽度都和它对不齐。


    图2.手动打空格失败的效果.png

    那么就得稍微麻烦点,设置下字间距了。其实也很简单,主要的代码就两行而已,示例代码如下:

    // 假设label的宽度为50
    let labelW: CGFloat = 50
    let text = "时间"
    // size函数是对boundingRect方法的简单封装,用来获取text正常显示情况下的size,大家肯定都知道,就不展开了。
    let textW = text.size(font: font(15)).width
    
    /**********就这两行主要代码*********/
    // *计算字间距*
    let kern = (labelW - textW) / CGFloat(text.count - 1)
    // *设置字间距*
    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)
    

    当然,可能更实际的需求是只设置某部分文字的字间距,达到部分文字对齐的效果,就像图1中的效果一样,只要设置冒号之前的字间距使冒号对齐就好。那么也很简单,根据自己的需求在设置属性的时候也设置下range就好了。

    相关文章

      网友评论

        本文标题:UILabel文字左右两边对齐的问题

        本文链接:https://www.haomeiwen.com/subject/ukjtahtx.html