• iOS UILabel 左上对齐


    iOS开发中经常会用到label,可以多行显示,但是当数据少的时候可能没有那么多行,就会在中间显示,如果想让它在左上对其,似乎要费一番功夫,一下是我总结的三种方法。

    - (void)viewDidLoad {

        [super viewDidLoad];

        NSString *string=@"为了测试label的显示方法,所以字符串的长度要长一些!!为了测试label的显示方法,所以字符串的长度要长一些!!为了测试label的显示方法,所以字符串的长度要长一些!!";

        _label=[[UILabel alloc]initWithFrame:CGRectMake(20, 50, SCREEN_WIDTH-40, 300)];

        _label.backgroundColor=[UIColor groupTableViewBackgroundColor];

        _label.numberOfLines=0;

        _label.text=string;

        [self.view addSubview:_label];

    }

    结果是这样的

    方法1:

    然后在viewDidLayoutSubviews方法中调用sizeToFit  记住一定是这个方法里

     -(void)viewDidLayoutSubviews{

        [self.label sizeToFit];

    }

    结果如下:

    方法2:写一个分类,重新设置frame

    #import <UIKit/UIKit.h>


    @interface UILabel (TopLeftLabel)

    - (void)setTopAlignmentWithText:(NSString *)text maxHeight:(CGFloat)maxHeight;

    @end

     

    .m文件中

    #import "UILabel+TopLeftLabel.h"


    @implementation UILabel (TopLeftLabel)

    - (void)setTopAlignmentWithText:(NSString *)text maxHeight:(CGFloat)maxHeight

    {

        CGRect frame = self.frame;

        CGSize size = [text sizeWithFont:self.font constrainedToSize:CGSizeMake(frame.size.width, maxHeight)];

        frame.size = CGSizeMake(frame.size.width, size.height);

        self.frame = frame;

        self.text = text;

    }


    @end

    用的时候直接调用

    [_label setTopAlignmentWithText:string maxHeight:300];

    下面是效果图

    方法3:

    3.重写drawRect方法 继承UILabel重写drawRect方法

    #import <UIKit/UIKit.h>


    @interface TopLeftLabel : UILabel


    @end

     

    .m文件中

    #import "TopLeftLabel.h"


    @implementation TopLeftLabel

    - (id)initWithFrame:(CGRect)frame {

        return [super initWithFrame:frame];

    }

    - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {

        CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];

        textRect.origin.y = bounds.origin.y;

        return textRect;

    }

    -(void)drawTextInRect:(CGRect)requestedRect {

        CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];

        [super drawTextInRect:actualRect];

    }

    @end

    用的时候直接继承这个label就好

    NSString *string=@"为了测试label的显示方法,所以字符串的长度要长一些!!为了测试label的显示方法,所以字符串的长度要长一些!!为了测试label的显示方法,所以字符串的长度要长一些!!";

        _label=[[TopLeftLabel alloc]initWithFrame:CGRectMake(20, 50, SCREEN_WIDTH-40, 300)];

        _label.backgroundColor=[UIColor groupTableViewBackgroundColor];

        _label.numberOfLines=0;

        _label.text=string;

        [self.view addSubview:_label];

    下面是效果图:

  • 相关阅读:
    XML时代离我们有多远?
    关注程序员健康之——最佳答案梅核气
    巾帼不让须眉 IT界10大女性CEO排行
    网站?XML?我的思考
    企业建站代码HTML滚动文字代码(垂直)
    web前端工程师:WEB标准,Web前端开发工程师必备技术列表
    数据库开发
    面向.NET 的XML 程序设计
    脾与胃病辨证
    技术部工作中常见问题(o_company)
  • 原文地址:https://www.cnblogs.com/codemakerhj/p/6611109.html
Copyright © 2020-2023  润新知