zoukankan      html  css  js  c++  java
  • UILabel文本垂直顶部对齐的方法

    也不知道为什么UILabel本身没有提供文本垂直顶部对齐的方法,真的有点晕。我们创建一个简单的UILabel来看看:

    [box type="info"]

    UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 300, 100)];

    [myLabel setText:@"苹果iOS(iphone Operation System)是由苹果公司开发的手持设备操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的"];

    [myLabel setFont:[UIFont fontWithName:@"Arial" size:14.0]];

    [myLabel setBackgroundColor:[UIColor blueColor]];

    [myLabel setTextColor:[UIColor whiteColor]];

    [self.view addSubview:myLabel];

    [/box]

    在ios模拟器上看到的效果如下图:

    Screenshot_4

    这显然不是我们要的效果,我们再添加一行代码:

    myLabel.numberOfLines = 0;

    结果是:

    Screenshot_5

    显示有点正常了,但如何使文字顶部对齐呢?

    实现代码:

    [box type="info"]

    UILabel *myLabel = [[UILabel alloc]init];//WithFrame:CGRectMake(10, 10, 300, 100)];

    UIFont *strFont = [UIFont fontWithName:@"Arial" size:14.0];

    [myLabel setFont:strFont];

    [myLabel setBackgroundColor:[UIColor blueColor]];

    [myLabel setTextColor:[UIColor whiteColor]];

    myLabel.numberOfLines = 0;

    CGSize maximumSize = CGSizeMake(300, 999);

    NSString *string = @”苹果iOS(iphone Operation System)是由苹果公司开发的手持设备操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的”;

    CGSize stringSize = [string sizeWithFont:strFont

    constrainedToSize:maximumSize

    lineBreakMode:myLabel.lineBreakMode];

    [myLabel setText:string];

    CGRect strFrame = CGRectMake(10, 10, 300, stringSize.height);

    myLabel.frame = strFrame;

    [self.view addSubview:myLabel];

    [/box]

    运行结果如下图:

    Screenshot_6

    盆友们,如果有更好的方法使UILabel垂直顶部对齐,一定要分享出来哦

    在iOS中默认的UILabel中的文字在竖直方向上只能居中对齐,从UILabel继承了一个新类,实现了居上对齐,居中对齐,居下对齐。具体如下:

    [cpp] view plaincopy
     
    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. {  
    12.     VerticalAlignmentTop = 0, // default  
    13.     VerticalAlignmentMiddle,  
    14.     VerticalAlignmentBottom,  
    15. } VerticalAlignment;  
    16. @interface myUILabel : UILabel  
    17. {  
    18. @private  
    19. VerticalAlignment _verticalAlignment;  
    20. }  
    21.   
    22. @property (nonatomic) VerticalAlignment verticalAlignment;  
    23.   
    24. @end  
    [cpp] view plaincopy
     
    1. //  
    2. //  myUILabel.m  
    3. //    
    4. //  
    5. //  Created by yexiaozi_007 on 3/4/13.  
    6. //  Copyright (c) 2013 yexiaozi_007. All rights reserved.  
    7. //  
    8.   
    9. #import "myUILabel.h"  
    10.   
    11. @implementation myUILabel  
    12. @synthesize verticalAlignment = verticalAlignment_;  
    13.   
    14. - (id)initWithFrame:(CGRect)frame {  
    15.     if (self = [super initWithFrame:frame]) {  
    16.         self.verticalAlignment = VerticalAlignmentMiddle;  
    17.     }  
    18.     return self;  
    19. }  
    20.   
    21. - (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment {  
    22.     verticalAlignment_ = verticalAlignment;  
    23.     [self setNeedsDisplay];  
    24. }  
    25.   
    26. - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {  
    27.     CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];  
    28.     switch (self.verticalAlignment) {  
    29.         case VerticalAlignmentTop:  
    30.             textRect.origin.y = bounds.origin.y;  
    31.             break;  
    32.         case VerticalAlignmentBottom:  
    33.             textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height;  
    34.             break;  
    35.         case VerticalAlignmentMiddle:  
    36.             // Fall through.  
    37.         default:  
    38.             textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0;  
    39.     }  
    40.     return textRect;  
    41. }  
    42.   
    43. -(void)drawTextInRect:(CGRect)requestedRect {  
    44.     CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];  
    45.     [super drawTextInRect:actualRect];  
    46. }  
    47.   
    48.   
    49. @end  

    在使用时:

    [cpp] view plaincopy
     
    1. lbl_mylabel = [[myUILabel alloc] initWithFrame:CGRectMake(20, 50, 150, 600)];  
    2. UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"halfTransparent.png"]];//使用半透明图片作为label的背景色  
    3. lbl_mylabel.backgroundColor = color;  
    4. lbl_mylabel.textAlignment = UITextAlignmentLeft;  
    5. lbl_mylabel.textColor = UIColor.whiteColor;  
    6. lbl_mylabel.lineBreakMode = UILineBreakModeWordWrap;  
    7. lbl_mylabel.numberOfLines = 0;  
    8. [lbl_mylabel setVerticalAlignment:VerticalAlignmentTop];  
    9. [self addSubview:lbl_mylabel]; 
  • 相关阅读:
    远程桌面下启动MATLAB时的License Manager Error -103错误
    自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名【转】
    XeLaTeX中文模板
    MySQL Connector 卸载
    Anaconda更新源
    命令行远程重启服务器
    gnuplot画图中文标注相关问题
    CentOS 远程桌面相关服务安装笔记
    Windows下python2.7安装64位mysqlclient
    LaTeX 修订
  • 原文地址:https://www.cnblogs.com/yjg2014/p/3850363.html
Copyright © 2011-2022 走看看