xcode中默认的UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中。
苹果官方的API没有提供这个接口
一、最简单的方法也是最没办法的办法,写个UILabel的扩展 (其实你google 网上有封装好的第三方控件)
#pragma mark VerticalAlign @interface UILabel (VerticalAlign) - (void)alignTop; - (void)alignBottom; @end // -- file: UILabel+VerticalAlign.m @implementation UILabel (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
二、使用sizeToFit
1.设置 Label 的text 2. 调用函数 sizeToFit 。这时 Label 已经是文字的高度和宽度了。此时应该已经顶部对齐了。
补充一点:sizeToFit的使用方法,反正我是遇到了。[需要先setText 再调用 sizeToFit]
[strLab setText:introduceStr];
[strLab sizeToFit];
- (CGSize)sizeThatFits:(CGSize)size; // return 'best' size to fit given size. does not actually resize view. Default is return existing view size
- (void)sizeToFit; // calls sizeThatFits: with current view bounds and changes bounds size.
如果你的文本超过了一行,如果想让文字靠顶部,就使用
myLabel.numberOfLines = 0; [myLabel sizeToFit];
三、在网上看到一个暴力的方法,但是挺好用。
在文本后面加多一些\n。 需要注意的是,\n后还得加至少一个空格,否则多余的\n会被UILabel忽略。
代码是这样的
for(inti=0;i<newLinesToPad;i++)self.text= [self.textstringByAppendingString:@"\n "];
参考的网页:
http://blog.devtang.com/blog/2011/11/20/set-uilabel-text-align-top/
http://stackoverflow.com/questions/1054558/vertically-align-text-within-a-uilabel