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]; 
  • 相关阅读:
    linux查看CPU和内存信息
    linux yum命令详解
    查看文件中关键字前后几行的内容
    vue.js+web storm安装及第一个vue.js
    android GPS: code should explicitly check to see if permission is available
    ASP.NET MVC Identity 使用自己的SQL Server数据库
    阿里云服务器,tomcat启动,一直卡在At least one JAR was scanned for TLDs yet contained no TLDs就不动了
    ASP.NET MVC4 MVC 当前上下文中不存在名称“Scripts”
    python 将windows字体中的汉字生成图片的方法
    Java android DES+Base64加密解密
  • 原文地址:https://www.cnblogs.com/yjg2014/p/3850363.html
Copyright © 2011-2022 走看看