UILabel顶端对齐

ode中默认的UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中。

比较郁闷的是,UILabel并不提供设置其垂直对齐方式的选项。所以如果你想让你的文字顶部对齐,那么就需要自己想办法了。

stackoverflow.com 上提供了几种方法来达到顶部对齐的效果。

方法一:

在显示文字时,首先计算显示当前的文字需要多宽和多高,然后将对应的UILabel的大小改变成对应的宽度和高度。

该方法的代码如下:

CGSize maximumSize =CGSizeMake(300,9999);
NSString*dateString [email protected]"The date today is January 1st, 1999";
UIFont*dateFont =[UIFont fontWithName:@"Helvetica" size:14];
CGSize dateStringSize =[dateString sizeWithFont:dateFont 
constrainedToSize:maximumSize 
lineBreakMode:self.dateLabel.lineBreakMode];
CGRect dateFrame =CGRectMake(10,10,300, dateStringSize.height);
self.dateLabel.frame = dateFrame;

方法二:

此方法更加简单粗暴,但是很有效。其方法是在文本后面加多一些\n。

需要注意的是,\n后还得加至少一个空格,否则多余的\n会被UILabel忽略。从这一点上看,UILabel似乎又过于“聪明”了。

该方法的代码如下:

for(int i=0; i<newLinesToPad; i++)
self.text =[self.text stringByAppendingString:@"\n "];

方法三:最正统的方法,利用objective-c的category特性,修改UILabel的绘制代码。示例代码如下:

// -- file: UILabel+VerticalAlign.h
#pragma mark VerticalAlign
@interfaceUILabel(VerticalAlign)
-(void)alignTop;
-(void)alignBottom;
@end

// -- file: UILabel+VerticalAlign.m
@implementationUILabel(VerticalAlign)
-(void)alignTop {
CGSize fontSize =[self.text sizeWithFont:self.font];
double finalHeight = fontSize.height *self.numberOfLines;
double finalWidth =self.frame.size.width;//expected width of label
CGSize theStringSize =[self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight)lineBreakMode:self.lineBreakMode];
int newLinesToPad =(finalHeight - theStringSize.height)/ fontSize.height;
for(int i=0; i<newLinesToPad; i++)
self.text =[self.text stringByAppendingString:@"\n "];
}

-(void)alignBottom {
CGSize fontSize =[self.text sizeWithFont:self.font];
double finalHeight = fontSize.height *self.numberOfLines;
double finalWidth =self.frame.size.width;//expected width of label
CGSize theStringSize =[self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight)lineBreakMode:self.lineBreakMode];
int newLinesToPad =(finalHeight - theStringSize.height)/ fontSize.height;
for(int i=0; i<newLinesToPad; i++)
self.text =[NSString stringWithFormat:@" \n%@",self.text];
}
@end

时间: 2024-10-22 21:34:25

UILabel顶端对齐的相关文章

UILabel顶部对齐解决方法(转载)

问题 我有一个UILabel高度最多能显示两行,如果里面内容只有一行,它是垂直居中的.怎么能让它顶端对齐呢? 回答 答案1:用sizeToFit改变UILabel的高度 nevan king,1969 赞 没法直接改变UILabel的垂直对齐方式,但是把 label 的 frame 高度改小也能实现相同的效果.为了看得清楚,我把 label 标为橘黄色了. 最简单的做法是: [myLabel sizeToFit]; sizeToFit 如果内容长度超过一行,把numberOfLines设成 0(

两个div横向排列,顶端对齐的方式。

1.左右两个div都设置为float:left,如果右边div没有设置宽度,右边div的宽度会根据div里的内容自动调整. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/x

table表格,顶端对齐

遇到的问题是这样的: 我希望模板内容四个字顶端对齐,只需要设置单元格属性即可 <td class="tbTitle" valign="top">模板内容:</td> 原文地址:https://www.cnblogs.com/zmyxixihaha/p/12289243.html

自定义UILabel的对齐方式

在iOS中默认的UILabel中的文字在竖直方向上只能居中对齐,自定义UILabel,实现了居上对齐,居中对齐,居下对齐.具体如下: 1 // 2 // myUILabel.h 3 // 4 // 5 // Created by yexiaozi_007 on 3/4/13. 6 // Copyright (c) 2013 yexiaozi_007. All rights reserved. 7 // 8 9 #import <UIKit/UIKit.h> 10 typedef enum 11

设置UILabel 两端对齐

遇到这个问题, 本来想找现成的方案,结果半天没合适的 于是自己搞了一个,其实挺简单,给需要的朋友: 直接上代码 - (void)viewDidLoad { [super viewDidLoad]; NSString * string = @"你好"; [self conversionCharacterInterval:4 current:string withLabel:self.tempLabel]; NSString * string1 = @"你好吗"; [s

UIlabel居上对齐遇到的问题和解决方法以及其他相关资料

UILabel的text的对其方式有四种类型 NSTextAlignmentLeft; NSTextAlignmentCenter; NSTextAlignmentRight; 基本够用 但是今天遇到个问题 就是当我label很高字体很小的时候 默认的label文字永远是默认在中间  上图 [myLabel sizeToFit];首先试了这个方法 但是发现改变大小适应这个属性 会让文字在左上角并且label的height也随之缩小 添加numberToLine=0可以在换行的时候改变高度 其实这

UILabel属性解析

UILabel 这是是用来显示文字最常用的一个控件, ?用户不可以输入,不可以点击 ? Text ?输入的文字以及显示的字体 Color ? ?字体颜色 Font ? ? 字体类型 默认有3个样式可以选择 1.systemFontOfSize ? ? 系统样式 2.boldSystemFontOfSize ? ?粗体样式 3.italicSystemFontOfSize ? 斜体样式 ? Alignment ? ?对齐方式 Lines ? ? ? 设置文字以多少行显示, ?值为0时候表示自动换行

iOS 中UI控件的各种对齐方式总结

1.textAligment : 文字的水平方向的对齐方式 取值 NSTextAlignmentLeft      = 0,    // 左对齐 NSTextAlignmentCenter    = 1,    // 居中对齐 NSTextAlignmentRight    = 2,    // 右对齐 哪些控件有这个属性 一般能够显示文字的控件都有这个属性 UITextField UILabel UITextView ... (UILabel 默认是居中对齐的,并没有提供顶部对齐的方式-_-,

UILabel字体加粗等属性和特效

/* Accessing the Text Attributes text  property font  property textColor  property textAlignment  property lineBreakMode  property enabled  property Sizing the Label’s Text adjustsFontSizeToFitWidth  property baselineAdjustment  property minimumFontS