博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS的UILabel设置居上对齐,居中对齐,居下对齐
阅读量:5855 次
发布时间:2019-06-19

本文共 3513 字,大约阅读时间需要 11 分钟。

前言:

没有理由不去努力.png

正文:

想实现UILabel居上对齐,居中对齐,居下对齐,如下效果:

效果图.png

在iOS中默认的UILabel中的文字在竖直方向上只能居中对齐,博主参考国外网站,从UILabel继承了一个新类,实现了居上对齐,居中对齐,居下对齐

具体如下:

创建:MYLabel 继承与UILabel

在MYLabel.h中完成

在MYLabel.h中完成

////  MYLabel.h//  LabelDemo//// Created by wangergang on 2016/12/7. // Copyright © 2016年 MYCompangName. All rights reserved. // #import 
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 { //居上对齐 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]; //居中对齐 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]; //居下对齐 MYLabel *bottomLabel = [[MYLabel alloc] initWithFrame:CGRectMake(20, 50, 350, 200)]; bottomLabel.text = @"看我居上对齐了啊、你看看对不对的啊、看来是对的"; bottomLabel.backgroundColor = [UIColor cyanColor]; bottomLabel.textAlignment = NSTextAlignmentLeft; bottomLabel.textColor = [UIColor blueColor]; bottomLabel.lineBreakMode = NSLineBreakByCharWrapping; bottomLabel.numberOfLines = 0; [bottomLabel setVerticalAlignment:VerticalAlignmentTop]; [self.view addSubview:bottomLabel]; }

其效果图如上图:就不再上传了

Demo位置

转载地址:http://jiojx.baihongyu.com/

你可能感兴趣的文章
centos 6.5 + haproxy 1.4搭配之 haproxy不记录日志一则轻笔记
查看>>
关于多字节、宽字节、WideCharToMultiByte和MultiByteToWideChar函数的详解
查看>>
深入浅出Linux设备驱动编程--设备驱动中的中断处理
查看>>
TechEd2009
查看>>
数学与物理故事相关链接
查看>>
Skype for Business Server 2015-10-ADFS-2-配置
查看>>
监控redis多实例的负载情况
查看>>
演示:基于上下文的访问控制(IOS防火墙的配置)
查看>>
linux apache两种工作模式详解
查看>>
Discuz!NT跨站缓存同步
查看>>
【Xamarin.Android】在移动应用程序中集成应用程序购买
查看>>
利用inotify+rsync实现linux文件批量更新
查看>>
XenServer 6.5实战系列之八:Creating a VM Template from an Existing VM
查看>>
[编程技巧] C++中优化BOOL 变量的声明
查看>>
WinXP、Win7脚本自动加域及用户资料迁移(一)
查看>>
hive中同列多行数据组合的方法以及array to string要点(行转列)
查看>>
VirtualBox 安装ghost版windows XP
查看>>
个人管理 - 目标管理之前,你会时间管理吗
查看>>
connection to adb错误解决办法
查看>>
手把手教你使用Bitvise Tunnelier设置SSH代理服务器
查看>>