IOS UILabel & UIFont & 根据文本获取文本占用的长宽

一 UILabel

文本标签的作用是用于显示文字,常用有以下

//显示的文字
@property(nonatomic,copy) NSString *text; 

//显示文字的字体
@property(nonatomic,retain) UIFont *font; 

//文字颜色
@property(nonatomic,retain) UIColor *textColor; 

//文字对齐模式
@property(nonatomic) NSTextAlignment textAlignment;




二 UIFont

UIFont用于设置字体,常用创建方法有以下几个:

//系统字体 fontSize 是设置字体大小
+ (UIFont *)systemFontOfSize:(CGFloat)fontSize;   

//粗体字体
+ (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize; 

//斜体字体
+ (UIFont *)italicSystemFontOfSize:(CGFloat)fontSize;




三  根据文本获取文本占用的长宽
1 IOS 提供了根据文本获取文本占用的长宽方法
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0);


2 参数说明

    2.1 size 文本能占用的最大宽高

    2.2 options 计算方式,系统提供了四中计数方式

//如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号
NSStringDrawingTruncatesLastVisibleLine

//常用,文本将以每行组成的矩形为单位计算整个文本的尺寸
NSStringDrawingUsesLineFragmentOrigin 

//计算行高时使用行间距
NSStringDrawingUsesFontLeading

//使用图元字形
NSStringDrawingUsesDeviceMetrics

    2.3 attributes 字体和大小

    2.4 context 一般设置为nil


3 注意

计算的文本超过了给定的最大的宽高,就返回最大宽高,没有超过,就返回真实占用的宽高


4实例
//需要计算长宽的字符
NSString *string = @"hello world1”;

//设置字体的大小
UIFont *font = [UIFont systemFontOfSize:20];
NSDictionary *dict = @{NSFontAttributeName:font};

//设置文本能占用的最大宽高
CGSize maxSize = CGSizeMake(MAXFLOAT, MAXFLOAT); 
CGRect rect =  [string boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil];




四 实例
1.代码(通过代码,掌握UILabel UIFont 文本长宽计数)
#import "ViewController.h"
#define GMTextFont [UIFont systemFontOfSize:10]
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    /**** UILable ****/
    //1 创建第一个UILabel fontSize 为 10
    [self label:@"hello world1" font:GMTextFont textColer:[UIColor blueColor] point:CGPointMake(10, 20)];
    //2 创建第二个UILabel fontSize 为 20
    UIFont *font2 = [UIFont systemFontOfSize:20];
    [self label:@"hello world2" font:font2 textColer:[UIColor blackColor] point:CGPointMake(10, 40)];
    //3 创建第三个UILabel fontSize 为 20 字体为 粗体
    UIFont *font3 = [UIFont boldSystemFontOfSize:20];
    [self label:@"hello world3" font:font3 textColer:[UIColor greenColor] point:CGPointMake(10, 60)];
    //4 创建第三个UILabel fontSize 为 40 字体为 斜体
    UIFont *font4 = [UIFont italicSystemFontOfSize:40];
    [self label:@"hello world4" font:font4 textColer:[UIColor grayColor] point:CGPointMake(10, 80)];
   
    
}


#pragma mark label系统
-(void)label:(NSString *)text font:(UIFont *)font textColer:(UIColor *)color point:(CGPoint)point
{
    //1.创建lable
    UILabel *label= [[UILabel alloc]init];
    //2.设置 文字
    [label setText:text];
    //3.设置字体
    [label setFont:font];
    //4.设置文字颜色
    [label setTextColor:color];
    //5.设置对齐模式
    [label setTextAlignment:NSTextAlignmentCenter];
    //6 根据文本计数占用宽高
    CGSize size = CGSizeMake(MAXFLOAT, MAXFLOAT);
    CGSize fontSize =  [self sizeWithString:text font:font maxSize:size];
    //7 设置label x,y,w,h
    label.frame=CGRectMake(point.x,point.y,fontSize.width,fontSize.height);
    //8 添加到view 中
    [self.view addSubview:label];
}


/**
 *  根据文本获取文本占用的大小
 *
 *  @param string  文本
 *  @param font    字体
 *  @param maxSize 最大的宽高
 *
 *  
 *   说明:
 *
 *  - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0);
 *
 *  size:文本能占用的最大宽高
 *  options: 计算方式
 *  attributes: 字体和大小
 *  context: nil
 *  计算的文本超过了给定的最大的宽高,就返回最大宽高,没有超过,就返回真实占用的宽高
 *
 */
- (CGSize)sizeWithString:(NSString *)string font:(UIFont *)font maxSize:(CGSize)maxSize
{
    NSDictionary *dict = @{NSFontAttributeName:font};
    CGRect rect =  [string boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil];
    return rect.size;
}
@end


2 展示

011625_jurn_1032974.png

转载于:https://my.oschina.net/wolx/blog/360670

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值