zoukankan      html  css  js  c++  java
  • Swift环境下实现UILabel居上 居中 居下对齐

    首先在Xcode中新建.h文件,将下面代码复制进去

    //
    //  myUILabel.h
    //  
    //
    //  Created by yexiaozi_007 on 3/4/13.
    //  Copyright (c) 2013 yexiaozi_007. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    typedef enum
    {
        VerticalAlignmentTop = 0, // default
        VerticalAlignmentMiddle,
        VerticalAlignmentBottom,
    } VerticalAlignment;
    @interface myUILabel : UILabel
    {
    @private
    VerticalAlignment _verticalAlignment;
    }
    
    @property (nonatomic) VerticalAlignment verticalAlignment;
    
    @end

    再新建一个.m文件。拷入下面代码

    //
    //  myUILabel.m
    //  
    //
    //  Created by yexiaozi_007 on 3/4/13.
    //  Copyright (c) 2013 yexiaozi_007. All rights reserved.
    //
    
    #import "myUILabel.h"
    
    @implementation myUILabel
    @synthesize verticalAlignment = verticalAlignment_;
    
    - (id)initWithFrame:(CGRect)frame {
        if (self = [super initWithFrame:frame]) {
            self.verticalAlignment = VerticalAlignmentMiddle;
        }
        return self;
    }
    
    - (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment {
        verticalAlignment_ = verticalAlignment;
        [self setNeedsDisplay];
    }
    
    - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
        CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
        switch (self.verticalAlignment) {
            case VerticalAlignmentTop:
                textRect.origin.y = bounds.origin.y;
                break;
            case VerticalAlignmentBottom:
                textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height;
                break;
            case VerticalAlignmentMiddle:
                // Fall through.
            default:
                textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0;
        }
        return textRect;
    }
    
    -(void)drawTextInRect:(CGRect)requestedRect {
        CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];
        [super drawTextInRect:actualRect];
    }
    
    
    @end
    

    假设这是你导入的第一个.m文件Xcode会提示你要不要创建Bridging-Header,选Ok

    在新创建的Bridging-Header文件中拷入下方代码

    #import "myUILabel.h"


    然后打开你的StoryBoard,点选你想要更改对齐方式的Label,将其Class改为myUILabel。示意图例如以下



    然后右键拖动Label或者按住Control键左键拖动连线到Label所在的父View的Class中生成Outlet,假设之前已经连线好。则改完Custom Class后,将连线生成代码中的UILabel改为myUILabel,示意图例如以下


    然后就能够调用该label的类方法

    label.verticalAlignment = VerticalAlignmentBottom

    按上方代码能够实现居下对其,居中 居上 分别将代码中的Bottom改为Middle和Top。默觉得居上


  • 相关阅读:
    01 Vue的起步和插值表达式
    06 扩展的对象的功能
    05 解构赋值
    04 函数之扩展运算符、箭头函数
    03 函数之默认值、剩余参数
    02 模板字符串
    01 let和const命令
    28 Bootstrap排版
    27 Bootstrap的列偏移
    26 Bootstrap的栅格系统
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6928416.html
Copyright © 2011-2022 走看看