iOS - Label文字竖排

作者: Mr_Bob_ | 来源:发表于2016-07-11 10:47 被阅读6149次
    Paste_Image.png
    前言:

    有的需求会给出文字竖排的方式,下面给出两种思路来实现这种效果.一是为UILabel添加分类,添加一个文字竖排的属性;而是为NSString添加分类,添加一个文字竖排的方法- (NSString *)VerticalString

    方法一(UILabel添加分类):
    #import <UIKit/UIKit.h>
    
    @interface UILabel (Extension)
    @property (nonatomic) NSString *verticalText;
    @end
    
    #import "UILabel+Extension.h"
    #import "objc/Runtime.h"
    
    @implementation UILabel (Extension)
    - (NSString *)verticalText{
        // 利用runtime添加属性
        return objc_getAssociatedObject(self, @selector(verticalText));
    }
    
    - (void)setVerticalText:(NSString *)verticalText{
        objc_setAssociatedObject(self, &verticalText, verticalText, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        NSMutableString *str = [[NSMutableString alloc] initWithString:verticalText];
        NSInteger count = str.length;
        for (int i = 1; i < count; i ++) {
            [str insertString:@"\n" atIndex:i*2-1];
        }
        self.text = str;
        self.numberOfLines = 0;
    }
    @end
    
    具体用法如下:
       NSString *string = @"北冥有鱼,其名为鲲。";
        UILabel *label = [[UILabel alloc] initWithFrame:(CGRectMake(self.view.bounds.size.width * 0.5, 100, 300, 600))];
        label.textColor = [UIColor redColor];
        label.verticalText = string;
        [label sizeToFit];//顶部显示
        [self.view addSubview:label];
    
    方法二(为NSSring添加分类):
    #import <Foundation/Foundation.h>
    
    @interface NSString (Extension)
    
    - (NSString *)VerticalString;
    
    @end
    
    #import "NSString+Extension.h"
    
    @implementation NSString (Extension)
    - (NSString *)VerticalString{
        NSMutableString * str = [[NSMutableString alloc] initWithString:self];
        NSInteger count = str.length;
        for (int i = 1; i < count; i ++) {
            [str insertString:@"\n" atIndex:i*2 - 1];
        }
        return str;
    }
    
    @end
    
    具体用法如下:
    NSString *verText = [@"北冥有鱼,其名为鲲。" VerticalString];
        UILabel *label = [[UILabel alloc] initWithFrame:(CGRectMake(self.view.bounds.size.width * 0.5, 100, 300, 600))];
        label.text = verText;
        label.numberOfLines = 0;
        label.textColor = [UIColor redColor];
        [label sizeToFit];//顶部显示
        [self.view addSubview:label];
    

    相关文章

      网友评论

      • 杏仁丶:感谢分享~
      • 小白猿:要是多列呢
      • kusoli:两排就不行了。
      • ugvibib:你这两个方法……是一个原理……
      • af17ba0bf359:字符串有竖着的属性 和方向 不用这么麻烦
        1a6eaf37a003:@松钻 哪个属性和方法 说一下
        ce0517d4a658:@松钻 能帮忙说一下属性是什么吗? 我这边找不到呢,谢谢啦
        Mr_Bob_:@松钻 这样呀,我还没发现呢,谢谢提醒哈

      本文标题:iOS - Label文字竖排

      本文链接:https://www.haomeiwen.com/subject/grtjjttx.html