iOS中UILabel设置居上对齐、居中对齐、居下对齐及文字置顶显示

iOS中UILabel设置居上对齐、居中对齐、居下对齐

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

具体如下:

//
// myUILabel.h
//
//
// Created by yexiaozi_007 on 3/4/13.
// Copyright (c) 2013 yexiaozi_007. All rights reserved.
//
#import <UIKit/UIKit.h>
typedef enum
{
 VerticalAlignmentTop = 0, // default
 VerticalAlignmentMiddle,
 VerticalAlignmentBottom,
} VerticalAlignment;
@interface myUILabel : UILabel
{
@private
VerticalAlignment _verticalAlignment;
}
@property (nonatomic) VerticalAlignment verticalAlignment;
@end 
//
// myUILabel.m
//
//
// Created by yexiaozi_007 on 3/4/13.
// Copyright (c) 2013 yexiaozi_007. All rights reserved.
//
#import "myUILabel.h"
@implementation myUILabel
@synthesize verticalAlignment = verticalAlignment_; 

- (id)initWithFrame:(CGRect)frame {
 if (self = [super initWithFrame:frame]) {
 self.verticalAlignment = VerticalAlignmentMiddle;
 }
 return self;
}
- (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment {
 verticalAlignment_ = verticalAlignment;
 [self setNeedsDisplay];
}
- (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 

在使用时:

lbl_mylabel = [[myUILabel alloc] initWithFrame:CGRectMake(20, 50, 150, 600)];
UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"halfTransparent.png"]];//使用半透明图片作为label的背景色
lbl_mylabel.backgroundColor = color;
lbl_mylabel.textAlignment = UITextAlignmentLeft;
lbl_mylabel.textColor = UIColor.whiteColor;
lbl_mylabel.lineBreakMode = UILineBreakModeWordWrap;
lbl_mylabel.numberOfLines = 0;
[lbl_mylabel setVerticalAlignment:VerticalAlignmentTop];
[self addSubview:lbl_mylabel]; 

UILabel 让文字置顶显示

我们经常会遇到将Label中文字置顶,也就是将文字顶到Lable框的最顶端显示的需求,UILabel是无法对内容文字进行置顶处理的,所以,如果我们不对Label加以额外的设置,就会出现如下情况:

置顶前

解决办法:我们可以通过sizeToFit方法解决它:

- (void)viewDidLoad {
 [super viewDidLoad];
 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake((self.view.bounds.size.width - 200)/2, 100, 200, 150)];
 label.backgroundColor = [UIColor yellowColor];
 NSString *labelText = @"我不知道如何置顶,谁来告诉我?";
 [label setText:labelText];
 [label setNumberOfLines:0];
 //让内容置顶
 [label sizeToFit];
 [self.view addSubview:label];
}

效果图:

置顶后

但是有些小伙伴会对内容置顶后的Label的frame有些顾虑,笔者也有,所以就在Label后方放置了一个和初始Label具有相同frame的红色背景,那么如果设置sizeToFit方法后,即使Label的frame有变化,我们也可以通过和红色背景的frame相对比而看出:

置顶前后frame对比

我们可以看到,文字内容置顶后,原Label的origin几乎没有变化,而bounds适应了文字,大小改变了。
所以不难看出,通过sizeToFit方法,我们可以将Label的大小“刚好”紧贴文字外部,从而实现了置顶的效果。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • iOS App开发中修改UILabel默认字体的方法

    在项目比较成熟的基础上,遇到了这样一个需求,应用中需要引入新的字体,需要更换所有Label的默认字体,但是同时,对于一些特殊设置了字体的label又不需要更换.乍看起来,这个问题确实十分棘手,首先项目比较大,一个一个设置所有使用到的label的font工作量是巨大的,并且在许多动态展示的界面中,可能会漏掉一些label,产生bug.其次,项目中的label来源并不唯一,有用代码创建的,有xib和storyBoard中的,这也将浪费很大的精力.这种情况下,我们可能会有下面两种处理方式. 一.普通方

  • iOS开发中使用UILabel设置字体的相关技巧小结

    一.初始化 复制代码 代码如下: UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 44)];      [self.view addSubview:myLabel]; 二.设置文字 1.设置默认文本 复制代码 代码如下: NSString *text = @"标签文本"; myLabel.text = text; 效果: 2.设置标签文本(此属性是iOS6.0之后才出现,如若不是必要,不

  • iOS长按UIlabel实现可复制功能

    前言 相信大家都知道在iOS中有三个控件自身是支持拷贝,粘贴的,如:UITextField,UITextView,UIWebView.但是,有时候我们会遇到需要长按UIlabel,弹出"复制"item,来实现可复制.那该怎么办呢?下面就来一起看看吧. 首先UIKit中提供给我们几个类 在开始之前,我们需要自定义一个WINCopyLabel继承UILable - (instancetype)initWithFrame:(CGRect)frame { if (self = [super i

  • Swift 3.0将UILabel数字颜色设置为红色的方法

    实现需求 这篇文章源于群友的一个问题:如何把『注:此商品只能整件(12的倍数发货),已选1袋,还差11袋』这段文字中的数字使用红色在 UILabel 中显示? 实现思路 我们可以使用UILabel 的 attribute string 属性,通过正则表达式匹配获取数字的范围,然后添加对应的 attribute. 实现代码 下面是实现代码,使用 swift 3.0 编写: //根据正则表达式改变文字颜色 func changeTextChange(regex: String, text: Stri

  • iOS 更改UILabel某些字体样式方法

    废话不多说了,大家先看下代码吧,具体待明日如下所示: //str:要改变的字 //result:整个label里的字 //color: 字的颜色 - (NSMutableAttributedString *)changeSomeText:(NSString *)str inText:(NSString *)result withColor:(UIColor *)color { NSMutableAttributedString *attributeStr = [[NSMutableAttribu

  • iOS应用中UILabel文字显示效果的常用设置总结

    创建UIlabel对象 复制代码 代码如下: UILabel* label = [[UILabel alloc] initWithFrame:self.view.bounds]; 设置显示文本 复制代码 代码如下: label.text = @"This is a UILabel Demo,"; 设置文本字体 复制代码 代码如下: label.font = [UIFont fontWithName:@"Arial" size:35]; 设置文本颜色 复制代码 代码如

  • iOS动态调整UILabel高度的几种方法

    简介 UILabel类实现了一个只读文本视图.您可以使用这个类来画一个或多个行静态文本,比如你可能使用确定的其他部分的用户界面.UILabel类支持既简单又复杂的样式标签的文本,还可以控制外观,比如标签是否使用一个影子或吸引了一大亮点. 在iOS程序中,看的见.摸得着的,都是UIView的子类.UILabel是一个用于显示文字信息的标签视图类,即UIView的子类. 以下是关于UILabel的官方网址:https://developer.apple.com/reference/uikit/uil

  • iOS开发笔记--详解UILabel的相关属性设置

    在iOS编程中UILabel是一个常用的控件,下面分享一下UILabel的相关属性设置的方法. 很多学习iOS6编程都是从storyboard开始,用到UILabel时是将控件拖到storyboard中生成实现,如果想要在-(void)viewDidLoad中用代码如[_label initWithFrame:CGRectMake(X,Y,WIDTH,HEIGHT)]方法改变拖拽到storyboard的label的大小是行不通的,因为程序加载时先执行了-(void)viewDidLoad的代码,

  • iOS 设置UILabel的行间距并自适应高度的方法

    实例如下: NSString *contentStr = @"总以为,在最初的地方,有一个最原来的我,就也会有一个最原来的你"; UILabel *tempLabel = [[UILabel alloc] init]; //设置背景颜色 tempLabel.backgroundColor = [UIColor redColor]; //设置内容 tempLabel.text = contentStr; //设置字体颜色 tempLabel.textColor = [UIColor wh

  • iOS中UILabel text两边对齐的实现代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: -(NSAttributedString *)setTextString:(NSString *)text { NSMutableAttributedString *mAbStr = [[NSMutableAttributedString alloc] initWithString:text]; NSMutableParagraphStyle *npgStyle = [[NSMutableParagraphStyle alloc] init]

随机推荐