`

UILabel顶端对齐

阅读更多

http://shfzhzhr.iteye.com/blog/1808000

 

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

 

 


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

 

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

 

方法一:

 

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

 

该方法的代码如下:

CGSize maximumSize =CGSizeMake(300,9999);
NSString*dateString =@"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

分享到:
评论

相关推荐

    iOS UILabel文字对齐方式

    本文将深入探讨如何实现UILabel的文字对齐方式,包括上对齐、上居中对齐、上两端对齐以及中、下对齐方式。 首先,UILabel的标准对齐方式有三种:左对齐、居中对齐和右对齐,这可以通过设置`NSTextAlignment`枚举值...

    swift+顶部对齐+底部对齐+UIlabel

    标题已经写明,例子代码里有,用法可以customlabel.verticalAlignment=CustomLabel.VerticalAlignment.VerticalAlignmentBottom底部对齐

    UILabel拓展属性

    本知识点将深入探讨如何为`UILabel`添加动态高度调整和顶端对齐等拓展属性。 首先,让我们关注动态设置label高度这一特性。在某些场景下,如显示未知长度的文本或者实时更新的内容,我们需要`UILabel`能够根据内容...

    UILabel、UILabel基本用法、UILabel详解

    - **描述**:`textAlignment`属性控制文本在`UILabel`中的对齐方式。默认为左对齐(`NSTextAlignmentLeft`),也可以设置为居中对齐(`NSTextAlignmentCenter`)或右对齐(`NSTextAlignmentRight`)。 - **示例...

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

    在某些设计需求中,我们可能需要使`UILabel`的文字内容两端对齐,以获得更美观的布局效果。本文将详细讲解如何在iOS中实现`UILabel`的文本两端对齐,并提供具体的代码示例。 首先,为了实现`UILabel`的两端对齐,...

    两端对齐label

    原生的label不好实现两端对齐,二期实现两端对齐也把每个字母分的很开,这个项目我把字母、数字、逗号等视为一个字,汉子为一个字,这样来去绘制两端对齐,你们也可以自己改动一下项目中的一个宏,来设置你们自己想...

    自定义uilabel

    7. alignment:设置文本对齐方式,如左对齐、居中、右对齐。 自定义UILabel通常涉及到以下方面: 1. **自定义文字样式**:可以通过修改font属性来改变字体大小和类型。同时,textColor可以调整文本颜色。为了实现...

    iOS_UILabel and UITextField

    4. **对齐方式**:`textAlignment`属性控制文本的水平对齐方式,如左对齐、居中或右对齐。 5. **多行显示**:`numberOfLines`属性可以设置为0,让`UILabel`自动换行显示多行文本。 6. **自动调整大小**:`...

    UILabel局部点击

    在iOS开发中,`UILabel`是用于展示单行或多行文本的常见视图。它通常用于显示信息或者作为用户交互的一部分。然而,`UILabel`默认并不支持子字符串的局部点击事件,即用户不能通过点击文本中的某一部分来触发特定的...

    UILabel内容中某个文字添加点击事件

    在iOS开发中,我们经常需要在用户界面中与用户进行交互,UILabel作为显示文本的常用控件,有时需要实现更复杂的功能,比如让其中的某段文字具备点击事件。本篇将详细介绍如何通过扩展UILabel来实现这个功能,以及...

    UIlabel根据文本、字体获得label宽度;自适应宽高

    在某些场景下,我们可能还需要考虑文本的排版方式,比如是否允许截断(`lineBreakMode`)和对齐方式(`textAlignment`)。这些属性也可以影响`UILabel`的显示效果。例如,如果希望文本在宽度不足时自动换行,可以...

    JTImageLabel, 在iOS上,JTImageLabel同时保留UILabel和 UIImageView.zip

    JTImageLabel, 在iOS上,JTImageLabel同时保留UILabel和 UIImageView JTImageLabel JTImageLabel是一个简单的视图,它包含一个 UILabel 和一个 UIImageView,即使你更改了 UILabel的对齐方式。安装使用 CocoaPods...

    UILabel的删除线效果,简单实用

    我们可以设置它的文本内容、字体、颜色、对齐方式等属性。默认情况下,`UILabel`并没有提供添加删除线的功能。因此,我们需要通过继承`UILabel`来自定义一个新的类来实现这个特性。 创建自定义`UILabel`子类的步骤...

    UILabel自动换行

    在iOS开发中,`UILabel` 是一个非常常用的控件,用于显示单行或多行文本。在某些场景下,我们希望文本能根据其内容自动换行,以适应不同的屏幕尺寸和布局需求。`UILabel` 的自动换行功能正是解决这一问题的关键。本...

    UIButton,UILabel文字旋转(倾斜)

    这里我们创建了一个NSMutableAttributedString,设置了段落样式,包括对齐方式、换行模式等。然后,我们通过设置`textRotation`属性来实现旋转。最后,将处理过的attributedString赋值给UILabel的`attributedText`。...

    swift-UIlabel根据文本字体获得label宽度;自适应宽高

    在Swift开发中,文本输入和显示是用户界面(UI)设计的重要组成部分,UILabel是一个常用的类,用于展示单行或多行的静态文本。本教程将详细讲解如何根据文本内容和字体来计算UILabel的宽度,并实现其自适应宽高的...

    iOS UIlabel 闪烁

    在iOS开发中,UILabel是用于显示单行或多行文本的常用控件,它简洁而功能强大。然而,有时候我们可能会遇到这样一个问题:UILabel在显示文本时出现闪烁的现象,这不仅影响用户体验,也可能对应用程序的整体质量产生...

Global site tag (gtag.js) - Google Analytics