UILabel使用技巧(三)

文本大小自适应


      文本大小自适应需要调用NSString类的实例方法计算出文本的size,然后根据这个size来设定UILabel的frame来实现。计算size的方法有:

(1)  - sizeWithFont: 

- (CGSize)countTextSize:(NSString *)text
{
    /*
     1、换行方式默认取NSLineBreakByWordWrapping;
     2、求出的size是单行显示时的高度和宽度.
     */
    UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];
    CGSize size = [text sizeWithFont:font];
    return  size;
}
(2)   - sizeWithFont: forWidth: lineBreakMode:
- (CGSize)countTextSize:(NSString *)text
{
    /*
     1、如果指定宽度小于字符串宽度,则宽度返回0; 
     2、求出的size是单行显示时的高度和宽度.
     */
    UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];
    CGSize size = [text sizeWithFont:font forWidth:400.0f lineBreakMode:NSLineBreakByWordWrapping];
    return  size;
}
(3)   - sizeWithFont: constrainedToSize:
- (CGSize)countTextSize:(NSString *)text
{
    /*
     字符串用指定字体在指定区域进行单行显示时,需要的高度和宽度;
     一般的用法是,指定区域的高度固定而宽度用MAXFLOAT,则返回值包含对应的宽度;
     如果指定区域的宽度不够,则宽度返回0;高度不够则没影响;
     核心:单行显示,指定区域的宽度要够大,获取宽度.
     */
    UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];
    CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(MAXFLOAT, 100.0f)];
    return  size;
}
(4)   - sizeWithFont: constrainedToSize: lineBreakMode:  (最常用)
- (CGSize)countTextSize:(NSString *)text
{
    /*
     字符串在指定区域内按照指定的字体显示时,需要的高度和宽度(宽度在字符串只有一行时有用)
     一般用法:指定区域的宽度而高度用MAXFLOAT,则返回值包含对应的高度
     如果指定区域的宽度指定,而字符串要显示的区域的高度超过了指定区域的高度,则高度返回0
     核心:多行显示,指定宽度,获取高度
     */
    UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];
    CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(320.f, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];
    return  size;
}
(5)   - sizeWithFont: minFontSize: actualFontSize: forWidth: lineBreakMode:
- (CGSize)countTextSize:(NSString *)text
{
    /*
     虽然指定了换行方式,在实际计算时也会换行,但返回的结果只是第一行的高度很宽度;
     指定了应该显示的字体,最小的字体,实际的字体,在实际计算中,如果宽度不够,则尽量缩小字符串的字体直至能够一行全部显示,如果缩到最小还不能完全显示字符串,则进行截断,返回截断后的字符串的高度和宽度; 
     字体实际的大小,存放在 actualFontSize里.
     */
    UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];
    CGFloat f = 0.0f; 
    CGSize size = [text sizeWithFont:font minFontSize:10.0f actualFontSize:&f forWidth:100.0f lineBreakMode:NSLineBreakByWordWrapping];
    return  size;
}


参考资料:http://blog.csdn.net/mamong/article/details/8542404

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值