iOS的UILabel設(shè)置居上對(duì)齊额湘,居中對(duì)齊,居下對(duì)齊

前言:

沒(méi)有理由不去努力.png

正文:
想實(shí)現(xiàn)UILabel居上對(duì)齊旁舰,居中對(duì)齊锋华,居下對(duì)齊,如下效果:

效果圖.png

在iOS中默認(rèn)的UILabel中的文字在豎直方向上只能居中對(duì)齊鬓梅,博主參考國(guó)外網(wǎng)站供置,從UILabel繼承了一個(gè)新類,實(shí)現(xiàn)了居上對(duì)齊绽快,居中對(duì)齊芥丧,居下對(duì)齊

具體如下:

創(chuàng)建:MYLabel 繼承與UILabel

在MYLabel.h中完成

在MYLabel.h中完成

//
//  MYLabel.h
//  LabelDemo
//
//  Created by wangergang on 2016/12/7.
//  Copyright ? 2016年 MYCompangName. All rights reserved.
//

#import <UIKit/UIKit.h>

typedef enum {
    VerticalAlignmentTop = 0, //default
    VerticalAlignmentMiddle,
    VerticalAlignmentBottom,
    
} VerticalAlignment;

@interface MYLabel : UILabel {

@private
    VerticalAlignment _verticalAlignment;
}

@property (nonatomic) VerticalAlignment verticalAlignment;

@end

在MYLabel.m中完成

在MYLabel.m中完成

//
//  MYLabel.m
//  LabelDemo
//
//  Created by wangergang on 2016/12/7.
//  Copyright ? 2016年 MYCompangName. All rights reserved.
//

#import "MYLabel.h"

@implementation MYLabel

@synthesize verticalAlignment = verticalAlignment_;

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        self.verticalAlignment = VerticalAlignmentMiddle;
    }
    return self;
}

- (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment {
    verticalAlignment_ = verticalAlignment;
    [self setNeedsLayout];
}


- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
    CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
    switch (self.verticalAlignment) {
        case VerticalAlignmentTop:
            textRect.origin.y = bounds.origin.y;
            break;
        case VerticalAlignmentBottom:
            textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height;
            break;
        case VerticalAlignmentMiddle:
            // Fall through.
        default:
            textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0;
    }
    return textRect;
}

-(void)drawTextInRect:(CGRect)requestedRect {
    CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];
    [super drawTextInRect:actualRect];
}

@end

使用:首先記得引入頭文件

import "MYLabel.h"

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setupLabel];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)setupLabel {
    //居上對(duì)齊
    MYLabel *topLabel = [[MYLabel alloc] initWithFrame:CGRectMake(20, 275, 350, 200)];

    topLabel.text = @"劇終了紧阔、劇終了、劇終了续担、劇終了擅耽、劇終了、劇終了物遇、劇終了乖仇、";
    topLabel.backgroundColor = [UIColor cyanColor];
    topLabel.textAlignment = NSTextAlignmentLeft;
    topLabel.textColor = [UIColor blueColor];
    topLabel.lineBreakMode = NSLineBreakByCharWrapping;
    topLabel.numberOfLines = 0;
    [topLabel setVerticalAlignment:VerticalAlignmentMiddle];
    [self.view addSubview:topLabel];
    
    
    //居中對(duì)齊
    MYLabel *middleLabel = [[MYLabel alloc] initWithFrame:CGRectMake(20, 500, 350, 200)];
    
    middleLabel.text = @"向下看、向下看询兴、向下看乃沙、向下看、向下看诗舰、向下看警儒、向下看、向下看眶根、";
    middleLabel.backgroundColor = [UIColor cyanColor];
    middleLabel.textAlignment = NSTextAlignmentLeft;
    middleLabel.textColor = [UIColor blueColor];
    middleLabel.lineBreakMode = NSLineBreakByCharWrapping;
    middleLabel.numberOfLines = 0;
    [middleLabel setVerticalAlignment:VerticalAlignmentBottom];
    [self.view addSubview:middleLabel];
    
    //居下對(duì)齊
    MYLabel *bottomLabel = [[MYLabel alloc] initWithFrame:CGRectMake(20, 50, 350, 200)];
    
    bottomLabel.text = @"看我居上對(duì)齊了啊蜀铲、你看看對(duì)不對(duì)的啊、看來(lái)是對(duì)的";
    bottomLabel.backgroundColor = [UIColor cyanColor];
    bottomLabel.textAlignment = NSTextAlignmentLeft;
    bottomLabel.textColor = [UIColor blueColor];
    bottomLabel.lineBreakMode = NSLineBreakByCharWrapping;
    bottomLabel.numberOfLines = 0;
    [bottomLabel setVerticalAlignment:VerticalAlignmentTop];
    [self.view addSubview:bottomLabel];
}

swift 語(yǔ)言相對(duì)簡(jiǎn)單多了,直接擼

import UIKit

/// label 的對(duì)齊類型
public enum VerticalAlignment {
    case top
    case middle
    case bottom
}


class MYLabel: UILabel {
    
    var verticalAlignment : VerticalAlignment?
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.verticalAlignment = VerticalAlignment.middle
        
    }
    
    override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
        var textRect: CGRect = super.textRect(forBounds: bounds, limitedToNumberOfLines: numberOfLines)
        switch self.verticalAlignment {
        case .top?:
            textRect.origin.y = bounds.origin.y
        case .bottom?:
            textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height
        case .middle?:
            fallthrough
        default:
            textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0
        }
        return textRect
    }
    
    override func draw(_ rect: CGRect) {
        let rect : CGRect = self.textRect(forBounds: rect, limitedToNumberOfLines: self.numberOfLines)
        super.drawText(in: rect)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
}

其效果圖如上圖:就不再上傳了

Demo位置github位置

最后: 自己創(chuàng)建了一個(gè) iOS 開(kāi)發(fā)群185377619,有需要的小伙伴加一下,大家共同進(jìn)步

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末属百,一起剝皮案震驚了整個(gè)濱河市记劝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌族扰,老刑警劉巖厌丑,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異渔呵,居然都是意外死亡蹄衷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門厘肮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人睦番,你說(shuō)我怎么就攤上這事类茂。” “怎么了托嚣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵巩检,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我示启,道長(zhǎng)兢哭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任夫嗓,我火速辦了婚禮迟螺,結(jié)果婚禮上冲秽,老公的妹妹穿的比我還像新娘。我一直安慰自己矩父,他們只是感情好锉桑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著窍株,像睡著了一般民轴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上球订,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天后裸,我揣著相機(jī)與錄音,去河邊找鬼冒滩。 笑死微驶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旦部。 我是一名探鬼主播祈搜,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼士八!你這毒婦竟也來(lái)了容燕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤婚度,失蹤者是張志新(化名)和其女友劉穎蘸秘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蝗茁,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡醋虏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哮翘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颈嚼。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饭寺,靈堂內(nèi)的尸體忽然破棺而出阻课,到底是詐尸還是另有隱情,我是刑警寧澤艰匙,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布限煞,位于F島的核電站,受9級(jí)特大地震影響员凝,放射性物質(zhì)發(fā)生泄漏署驻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旺上。 院中可真熱鬧瓶蚂,春花似錦、人聲如沸抚官。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凌节。三九已至钦听,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倍奢,已是汗流浹背朴上。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卒煞,地道東北人痪宰。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像畔裕,于是被迫代替她去往敵國(guó)和親衣撬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容