zoukankan      html  css  js  c++  java
  • iOS7中计算UILabel中字符串的高度

    iOS7中计算UILabel中字符串的高度

    iOS7中出现了新的方法计算UILabel中根据给定的Font以及str计算UILabel的frameSize的方法.本人提供category如下:

    UILabel+StringFrame.h

    复制代码
    //
    //  UILabel+StringFrame.h
    //  LabelHeight
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface UILabel (StringFrame)
    
    - (CGSize)boundingRectWithSize:(CGSize)size;
    
    @end
    复制代码

    UILabel+StringFrame.m

    复制代码
    //
    //  UILabel+StringFrame.m
    //  LabelHeight
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import "UILabel+StringFrame.h"
    
    @implementation UILabel (StringFrame)
    
    - (CGSize)boundingRectWithSize:(CGSize)size
    {
        NSDictionary *attribute = @{NSFontAttributeName: self.font};
        
        CGSize retSize = [self.text boundingRectWithSize:size
                                                 options:
                          NSStringDrawingTruncatesLastVisibleLine |
                          NSStringDrawingUsesLineFragmentOrigin |
                          NSStringDrawingUsesFontLeading
                                              attributes:attribute
                                                 context:nil].size;
        
        return retSize;
    }
    
    
    @end
    复制代码

    现在来测试代码:

    效果图如下:

    我们来试验一下使用自定义字体测试一回:

    显示结果:

    无论自定义字体还是系统字体都是可以完美使用的.

    以下代码供你测试:

    复制代码
        // 字符串
        NSString *str = @"日落时分,沏上一杯山茶,听一曲意境空远的《禅》,心神随此天籁,沉溺于玄妙的幻境里。仿佛我就是那穿梭于葳蕤山林中的一只飞鸟,时而盘旋穿梭,时而引吭高歌;仿佛我就是那潺潺流泻于山涧的一汪清泉,涟漪轻盈,浩淼长流;仿佛我就是那竦峙在天地间的一座山峦,伟岸高耸,从容绵延。我不相信佛,只是喜欢玄冥空灵的梵音经贝,与慈悲淡然的佛境禅心,在清欢中,从容幽静,自在安然。一直向往走进青的山,碧的水,体悟山水的绚丽多姿,领略草木的兴衰荣枯,倾听黄天厚土之声,探寻宇宙自然的妙趣。走进了山水,也就走出了喧嚣,给身心以清凉,给精神以沉淀,给灵魂以升华。";
        
        // 初始化label
        UILabel *label = [UILabel new];
        label.backgroundColor = [UIColor whiteColor];
        [self.view addSubview:label];
        
        // label获取字符串
        label.text = str;
        
    
        // label获取字体
        label.font = [UIFont fontWithName:nil size:18];
        
        // 根据获取到的字符串以及字体计算label需要的size
        CGSize size = [label boundingRectWithSize:CGSizeMake(320, 0)];
        
        // 设置无限换行
        label.numberOfLines = 0;
        
        // 设置label的frame
        label.frame = CGRectMake(0.0f, 50.0f, size.width, size.height);
    复制代码

    iOS6可以使用如下方式来获取字符串的size值

            size = [text sizeWithFont:font
                      constrainedToSize:size
                           lineBreakMode:NSLineBreakByCharWrapping];

     但此方法已经在iOS7中被废弃了,注意.

    //  获取字符串的大小  ios7

    - (CGSize)getStringRect:(NSString*)aString

    {

        CGSize size;

        

        NSAttributedString* atrString = [[NSAttributedStringalloc] initWithString:aString];

        

        NSRange range = NSMakeRange(0, atrString.length);

        

        NSDictionary* dic = [atrString attributesAtIndex:0 effectiveRange:&range];

        

        size = [aString boundingRectWithSize:CGSizeMake(237, 200)  options:NSStringDrawingUsesLineFragmentOriginattributes:diccontext:nil].size;

        

        return  size;

        

    }

    //  获取字符串的大小  ios6

    - (CGSize)getStringRect_:(NSString*)aString

    {

        CGSize size;

        

        UIFont *nameFont=[UIFont fontWithName:@"Helvetica" size:13];

        size=[aString sizeWithFont:nameFont constrainedToSize:CGSizeMake(237, 200) lineBreakMode:NSLineBreakByCharWrapping];

        return  size;

    }

    原文:http://www.cnblogs.com/YouXianMing/p/3706269.html

  • 相关阅读:
    XMLHTTP使用具体解释
    C++之EOF()
    具体解释VB中连接access数据库的几种方法
    Android中部署自己的su
    hdoj 1052 Tian Ji -- The Horse Racing【田忌赛马】 【贪心】
    【C/C++多线程编程之九】pthread读写锁
    数据结构课程设计题目十二_计算机学院学生会的打印机(优先队列)
    百度开发人员面试题(优化)
    为Windows 7的winsxs目录瘦身,谨慎。
    sonix uvc驱动的加入 RT5350支持H264
  • 原文地址:https://www.cnblogs.com/Peak-Banish/p/4042075.html
Copyright © 2011-2022 走看看