zoukankan      html  css  js  c++  java
  • 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];

    下面是效果图:

  • 相关阅读:
    Linux/Ubuntu tree 命令以树形结构显示文件夹目录结构
    apt-get install的默认安装路径
    error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
    利用keras进行手写数字识别模型训练,并输出训练准确度
    OpenCV:图像的合并和切分
    OpenCV:图像的按位运算
    OpenCV:增加和减少图像的亮度,图像的加减法
    OpenCV:获取图像当中某一点的坐标
    OpenCV:图像的裁剪
    OpenCV:图像的水平、垂直、水平垂直翻转
  • 原文地址:https://www.cnblogs.com/codemakerhj/p/6611109.html
Copyright © 2011-2022 走看看