根据字体计算CGRect

    UILabel *label = [[UILabel alloc]init];
    label.numberOfLines = 0;//多行显示
    label.backgroundColor = [UIColor yellowColor];
    label.font = [UIFont systemFontOfSize:20];
    NSString *string = @"我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国";
    UIFont *font = [UIFont systemFontOfSize:20];
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = 20;//行间距
    NSDictionary *attributes = @{
                                 NSFontAttributeName:font,
                                 NSParagraphStyleAttributeName:paragraphStyle
                                 };//其他属性可以在UIKit的第一个头文件中查看,颜色。。
    CGRect size = [string boundingRectWithSize:CGSizeMake(200, 10000)
                                       options:NSStringDrawingUsesLineFragmentOrigin
                                    attributes:attributes
                                       context:nil];//iOS 7.0有效
    NSAttributedString *attributeString =  [[NSAttributedString alloc]initWithString:string attributes:attributes];//设置属性字体

    label.frame = size;
    label.attributedText = attributeString;
    label.center = self.view.center;
    [self.view addSubview:label];

封装的方法:

- (CGSize)textSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode
{
    CGSize textSize;
    if ([XWCHelper isIOS7orHigher]) {

        if (CGSizeEqualToSize(size, CGSizeZero)) {

            textSize =  [self sizeWithAttributes:@{NSFontAttributeName:font}];
        }
        else{

            NSStringDrawingOptions option = NSStringDrawingUsesLineFragmentOrigin;
            //NSStringDrawingTruncatesLastVisibleLine如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。 如果指定了NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略 NSStringDrawingUsesFontLeading计算行高时使用行间距。(译者注:字体大小+行间距=行高)
            NSDictionary *attributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
            CGRect rect = [self boundingRectWithSize:size
                                             options:option
                                          attributes:attributes
                                             context:nil];
            textSize = rect.size;
        }

    }
    else{

        if (CGSizeEqualToSize(size, CGSizeZero)) {

            textSize =[self sizeWithFont:font];
        }
        else{

            textSize =[self  sizeWithFont:font constrainedToSize:size lineBreakMode:lineBreakMode];
        }
    }
    return textSize;
}
时间: 2024-10-27 09:44:37

根据字体计算CGRect的相关文章

根据ui控件的字体计算占用的长度

//1.根据icon计算name的长度 CGFloat nameX = CGRectGetMaxX(_icon.frame) + kBorder; CGFloat nameY = iconY; //计算用户昵称的长度 CGSize nameSize = [_weiBo.name sizeWithFont:_name.font]; _name.frame = CGRectMake(nameX, nameY, nameSize.width, nameSize.height); //2.设置vip的f

PHP-根据字符串和所用字体计算字符串所占宽高

今天由于用GD画图, 需要把一段文字在一个框内居中, 但是文字的宽度如果用strlen($str) * $font_size来计算的话, 由于文字不是等宽高的, 所以会导致偏离, 最后选用的GD库的imagettfbbox()函数, 其原型如下 array ImageTTFBBox(int size, int angle, string fontfile, string text); 其中返回一个数组, 有八个元素, 描述了四个角的坐标 0     左下角 X 位置 1     左下角 Y 位置

QT 字体计算

CSize fontMetricsCSize(QString source, QPainter *pDC); CSize fontMetricsCSize(QString source, QPainter *pDC){ CSize sz; QFontMetrics fontMetrics(pDC->font()); int nFontWidth = fontMetrics.width(source); int nFontHeight = fontMetrics.height(); sz = CS

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)- 

iOS常用技术-计算Label高度

////  ViewController.m//  计算Label高度////  Created by 大欢 on 16/1/19.//  Copyright © 2016年 bjsxt. All rights reserved.// #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {    [super vie

windows程序设计学习笔记-文本和字体

BOOL TextOut( In HDC hdc, In int nXStart, In int nYStart, In LPCTSTR lpString, In int cchString ); 在指定位置写字符串.使用当前选择的字体,背景颜色,字体颜色. nXStart:系统用来对齐字符串的参考点X坐标.逻辑坐标. nYStart 对参考点的解释取决于当前的文本对齐模式.可以用GetTextAlign取得此模式. 可以用SetTextAlign改变此模式. TA_BASELINE:参考点在基

iOS 动态计算文本内容的高度

关于ios 下动态计算文本内容的高度,经过查阅和网上搜素,现在看到的有以下几种方法: 1. //  获取字符串的大小  ios6 - (CGSize)getStringRect_:(NSString*)aString { CGSize size; UIFont *nameFont=[UIFont fontWithName:@"Helvetica" size:13]; size=[aString sizeWithFont:nameFont constrainedToSize:CGSize

探究为何rem在chrome浏览器上计算出错

最近在一个项目中,测试同学提了一个bug,说手机上有个页面的某些字体显示偏大.就像这样 我用chrome浏览器在pc上测试了一下,发现pc上也有这个问题,但是用其它浏览器打开这个页面就没有发现这个问题. 于是,上网百度了一下,发现原来是chrome浏览器的问题. 通过各种百度Google然后我总结了一下这个问题产生的原因: chrome浏览器目前支持的最小的字体大小为12px,而我在html根元素上设置font-size:62.5%,计算之后就是10px,1rem=10px. 由于我页面字体大小

Foundation各种NS

1.1 NSRange NSRange range = NSMakeRange(2, 4);//location=2,len=4 NSString *str = @"i love oc"; //查找对应的字符串的位置location,length range = [str rangeOfString:@"love"]; 4.2 NSMutableString // NSMutableString可变字符串 NSMutableString *s1 = [NSMutab