2020年6月4日星期四

iOS开发Label文字显示位置(上、中、下)

iOS开发Label文字显示位置(上、中、下)


在系统自带的UILabel中是没有吸顶及吸底部的方法的(如果有请告诉我,我没找到),于是乎重写label

 1 // 2 // gzhVerticalAlignmentLabel.h 3 // VerticalAlignmentLabel 4 // 5 // Created by 郭志贺 on 2020/6/1. 6 // Copyright © 2020 郭志贺. All rights reserved. 7 // 8  9 #import <UIKit/UIKit.h>10 11 NS_ASSUME_NONNULL_BEGIN12 13 typedef enum VerticalAlignment {14 15  VerticalAlignmentTop,16 17  VerticalAlignmentMiddle,18 19  VerticalAlignmentBottom,20 21 } VerticalAlignment;22 23 @interface gzhVerticalAlignmentLabel : UILabel{24 25 @private VerticalAlignment verticalAlignment_;26 27 }28 29 30 31 @property (nonatomic, assign) VerticalAlignment verticalAlignment;32 33 @end34 35 NS_ASSUME_NONNULL_END
 1 // 2 // gzhVerticalAlignmentLabel.m 3 // VerticalAlignmentLabel 4 // 5 // Created by 郭志贺 on 2020/6/1. 6 // Copyright © 2020 郭志贺. All rights reserved. 7 // 8  9 #import "gzhVerticalAlignmentLabel.h"10 11 @implementation gzhVerticalAlignmentLabel12 13 @synthesize verticalAlignment = verticalAlignment_;14 15 16 17 18 - (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment {19 20  verticalAlignment_ = verticalAlignment;21 22  [self setNeedsDisplay];23 24 }25 26 27 28 - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {29 30  CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];31 32  switch (self.verticalAlignment) {33 34   case VerticalAlignmentTop:35 36    textRect.origin.y = bounds.origin.y;37 38    break;39 40   case VerticalAlignmentBottom:41 42    textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height;43 44    break;45 46   case VerticalAlignmentMiddle:47 48 49   default:50 51    textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0;52 53  }54 55  return textRect;56 57 }58 59 60 61 -(void)drawTextInRect:(CGRect)requestedRect {62 63  CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];64 65  [super drawTextInRect:actualRect];66 67 }68 69 @end

使用方式

 1 // 2 // ViewController.m 3 // VerticalAlignmentLabel 4 // 5 // Created by 郭志贺 on 2020/6/1. 6 // Copyright © 2020 郭志贺. All rights reserved. 7 // 8  9 #import "ViewController.h"10 #import "gzhVerticalAlignmentLabel.h"11 12 /** 屏幕高度 */13 #define ScreenH [UIScreen mainScreen].bounds.size.height14 /** 屏幕宽度 */15 #define ScreenW [UIScreen mainScreen].bounds.size.width16 17 @interface ViewController ()18 19 @property(nonatomic,strong)gzhVerticalAlignmentLabel * topLabel;20 @property(nonatomic,strong)gzhVerticalAlignmentLabel * centerLabel;21 @property(nonatomic,strong)gzhVerticalAlignmentLabel * bottomLabel;22 23 @end24 25 @implementation ViewController26 27 - (void)viewDidLoad {28  [super viewDidLoad];29  // Do any additional setup after loading the view.30  31  _topLabel = [[gzhVerticalAlignmentLabel alloc]initWithFrame:CGRectMake((ScreenW-200)/2.0, 100, 200, 80)];32  _topLabel.verticalAlignment = VerticalAlignmentTop;33  _topLabel.backgroundColor = [UIColor redColor];34  _topLabel.font = [UIFont systemFontOfSize:15];35  _topLabel.textAlignment = NSTextAlignmentCenter;36  _topLabel.text = @"文字顶部显示";37  [self.view addSubview:_topLabel];38  39  _centerLabel = [[gzhVerticalAlignmentLabel alloc]initWithFrame:CGRectMake((ScreenW-200)/2.0, CGRectGetMaxY(_topLabel.frame)+10, 200, 80)];40  _centerLabel.verticalAlignment = VerticalAlignmentMiddle;41  _centerLabel.backgroundColor = [UIColor redColor];42  _centerLabel.font = [UIFont systemFontOfSize:15];43  _centerLabel.textAlignment = NSTextAlignmentCenter;44  _centerLabel.text = @"文字中间显示";45  [self.view addSubview:_centerLabel];46  47  48  _bottomLabel = [[gzhVerticalAlignmentLabel alloc]initWithFrame:CGRectMake((ScreenW-200)/2.0, CGRectGetMaxY(_centerLabel.frame)+10, 200, 80)];49  _bottomLabel.verticalAlignment = VerticalAlignmentBottom;50  _bottomLabel.backgroundColor = [UIColor redColor];51  _bottomLabel.font = [UIFont systemFontOfSize:15];52  _bottomLabel.textAlignment = NSTextAlignmentCenter;53  _bottomLabel.text = @"文字底部显示";54  [self.view addSubview:_bottomLabel];55 }56 57 58 @end

 


没有评论:

发表评论