zoukankan      html  css  js  c++  java
  • 自定义UILabel设置垂直方向的居上,居中,居下

    IOS系统框架中UILabel的属性textAlignment只调整水平方向的居中,居左,居右,而没有垂直方向的调整。所以要自定义一个继承自UILabel的类,在类的实现文件中进行文字的重绘,达到垂直方向的位置调整。

    新建一个类文件,继承自UILabel,头文件如下:

    #import <UIKit/UIKit.h>
    
    typedef NS_ENUM(NSInteger,VerticalAlignment){
        VerticalAlignmentTop,
        VerticalAlignmentMiddle,
        VerticalAlignmentBottom
    };
    
    @interface FSVerticallyAlignedLabel : UILabel
    
    @property (nonatomic,assign) VerticalAlignment verticalAlignment;
    
    @end
    

     在.m文件中,实现verticalAlignment的设置方法

    @implementation FSVerticallyAlignedLabel
    
    - (id)initWithFrame:(CGRect)frame
    {
        if (self = [super initWithFrame:frame]) {
            self.verticalAlignment = VerticalAlignmentMiddle;
        }
        
        return self;
    }
    
    /**
     *  设置属性方法
     *
     *  @param verticalAlignment 垂直调整位置
     */
    - (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment
    {
        _verticalAlignment = verticalAlignment;
        
        [self setNeedsDisplay];
    }
    
    /**
     *  计算文字的矩形区域
     *
     *  @param bounds        label矩形区域
     *  @param numberOfLines 行数
     *
     *  @return 返回文字所占的矩形区域
     */
    - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
    {
        CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
        
        //通过设定字体区域的y值来调整垂直位置
        switch (self.verticalAlignment) {
            case VerticalAlignmentTop:
                textRect.origin.y = bounds.origin.y;
                break;
            case VerticalAlignmentMiddle:
                textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0;
                break;
            case VerticalAlignmentBottom:
                textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height;
                break;
        }
        
        return textRect;
    }
    
    //重写父类方法
    - (void)drawTextInRect:(CGRect)rect
    {
        CGRect actualRect = [self textRectForBounds:rect limitedToNumberOfLines:self.numberOfLines];
        [super drawTextInRect:actualRect];
    }
    
    @end
    
  • 相关阅读:
    传递函数笔记
    模糊控制算法详细讲解
    SDRAM学习笔记
    基于STM32的CRC校验说明
    如何把图片设置成24位图/8位图??
    C2MIF软件使用说明
    ROM和RAM的内存详细说明
    Logback配置
    Logback使用
    common-logging源码解析
  • 原文地址:https://www.cnblogs.com/csdnmc/p/5407079.html
Copyright © 2011-2022 走看看