8 ios 系统计算文字

2015-12-01 14:23:48 zyjjjay 阅读数 415

1,这是根据uitextview来进行计算高度的

[UITextView sizeThatFits:(CGSize)size] ,带入自己的textview,调用这个方法,返回一个float类型的高度给你。


也可以用系统的方法


/**
 @method 获取指定宽度width的字符串在UITextView上的高度
 @param textView 待计算的UITextView
 @param Width 限制字符串显示区域的宽度
 @result float 返回的高度
 */
- (float) heightForString:(UITextView *)textView andWidth:(float)width{
     CGSize sizeToFit = [textView sizeThatFits:CGSizeMake(width, MAXFLOAT)];
    return sizeToFit.height;
}
2.根据字符串进行高度的计算,
@method 获取指定宽度width,字体大小fontSize,字符串value的高度
 @param value 待计算的字符串
 @param fontSize 字体的大小
 @param Width 限制字符串显示区域的宽度
 @result float 返回的高度
 */
- (float) heightForString:(NSString *)value andWidth:(float)width{
    //获取当前文本的属性
    NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:value];
    _text.attributedText = attrStr;
    NSRange range = NSMakeRange(0, attrStr.length);
    // 获取该段attributedString的属性字典
    NSDictionary *dic = [attrStr attributesAtIndex:0 effectiveRange:&range];
    // 计算文本的大小
    CGSize sizeToFit = [value boundingRectWithSize:CGSizeMake(width - 16.0, MAXFLOAT) // 用于计算文本绘制时占据的矩形块
                                               options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading // 文本绘制时的附加选项
                                            attributes:dic        // 文字的属性
                                               context:nil].size; // context上下文。包括一些信息,例如如何调整字间距以及缩放。该对象包含的信息将用于文本绘制。该参数可为nil
    return sizeToFit.height + 16.0;
}


2014-11-03 18:49:30 u010913882 阅读数 1355


   最近写项目计算文字高度那里在 7.0.4 和 7.1 上遇见 文字高度 有误差的问题,一般写我就直接用系统提供的方法,计算高度,如下:

  

//得到文字的高度
+(NSValue*)getStringWithRect:(NSString*)aString
                   viewWidth:(NSInteger)width
                        font:(float)font
{
    CGSize size ;
    if (ISIOS7) {
        NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:font]};
        size = [aString boundingRectWithSize:CGSizeMake(width, 0)
                                     options:\
                NSStringDrawingTruncatesLastVisibleLine |
                NSStringDrawingUsesLineFragmentOrigin |
                NSStringDrawingUsesFontLeading
                                  attributes:attribute
                                     context:nil].size;
    }else{
        UIFont *nameFont = [UIFont systemFontOfSize:font];
        size=[aString sizeWithFont:nameFont constrainedToSize:CGSizeMake(width,1000) lineBreakMode:NSLineBreakByWordWrapping];
    }
    return [NSValue valueWithCGSize:size];
}

  但是现在运行在ios 7.0.4 和 7.1 上计算文字高度的地方有误差具体表现:

 


       第一张图是在 7.0.4  上运行的效果,第二张是6.1.3, 7.1 , 8.0,8.1 上运行的效果,我加断电查看 在不同的版本上计算的高度是一样的,但是最后显示出来的就是不一样的,有误差。经过研究发现把最后计算出来的高度加1或2的时候显示也是正常的,由此可以看出计算出来的高度没有得到最大值才出的错误

      具体解决方法:

    

//得到文字的高度
+(NSValue*)getStringWithRect:(NSString*)aString
                   viewWidth:(NSInteger)width
                        font:(float)font
{
    CGSize size ;
    if (ISIOS7) {
        NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:font]};
        size = [aString boundingRectWithSize:CGSizeMake(width, 0)
                                     options:\
                NSStringDrawingTruncatesLastVisibleLine |
                NSStringDrawingUsesLineFragmentOrigin |
                NSStringDrawingUsesFontLeading
                                  attributes:attribute
                                     context:nil].size;
        size.height = ceil(size.height);
    }else{
        //UIFont *nameFont=[UIFont fontWithName:@"Arial" size:font];
        UIFont *nameFont = [UIFont systemFontOfSize:font];
        size=[aString sizeWithFont:nameFont constrainedToSize:CGSizeMake(width,1000) lineBreakMode:NSLineBreakByWordWrapping];
    }
    return [NSValue valueWithCGSize:size];
}

上面加了句 size.height = ceil(size.height) ;就是最后的解决办法,  ceil  是 取上整 的函数,意思就是 计算出来的高度为 50.10999  , 60.888  最后得到的高度 是 51,61 .

2016-07-11 11:05:26 konglongaa 阅读数 679

这篇文章主要介绍了Shell脚本中计算字符串长度的5种方法,来自于个人Shell脚本长期的开发经验,需要的朋友可以参考下


有时在Linux操作系统中需要计算某个字符串的长度,通过查询资料整理了下目前Shell中获取字符串的长度的多种方法,在这里分享给大家,方法如下:

方法1: 使用wc -L命令
wc -L可以获取到当前行的长度,因此对于单独行的字符串可以用这个简单的方法获取,另外wc -l则是获取当前字符串内容的行数。

复制代码 代码如下:
echo "abc" |wc -L

方法2: expr length string
使用expr length可以获取string的长度

方法3: awk获取域的个数,但是如果大于10个字符的长度时是否存在问题需要后面确认

复制代码 代码如下:
echo "abc" |awk -F "" '{print NF}'


方法4: 通过awk+length的方式获取字符串长度
复制代码 代码如下:
echo “Alex”|awk '{print length($0)}'


方法5: 通过echo ${#string}的方式(注意:这里的string是该字符串的变量名)
复制代码 代码如下:
name=Alex
echo ${#name}

shell中应该还有其它获取字符串长度的方法,请大家有知道其它方式的回复补充下,有存在问题的地方大家指正!

2015-05-06 16:45:48 iOS_Water 阅读数 1824

//今天在做语音评测的时候,遇到了要给label上的字符串按单词得分配置不同颜色时,遇到获取单词range的问题。



iOS 通过字符串获取单词及range


    NSString * str2 = @"Do the any the additional setup after loading the view, typically from a nib.";

    [str2 enumerateSubstringsInRange:NSMakeRange(0, str2.length-1) options:NSStringEnumerationByWords usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {

        NSLog(@"substring--- %@ range :%@", substring, NSStringFromRange(substringRange));

    }];



输出:

substring--- Do range :{0, 2}

substring--- the range :{3, 3}

substring--- any range :{7, 3}

substring--- the range :{11, 3}

substring--- additional range :{15, 10}

substring--- setup range :{26, 5}

substring--- after range :{32, 5}

substring--- loading range :{38, 7}

substring--- the range :{46, 3}

substring--- view range :{50, 4}

substring--- typically range :{56, 9}

substring--- from range :{66, 4}

substring--- a range :{71, 1}

substring--- nib range :{73, 3}


2018-07-12 10:35:23 ios_xumin 阅读数 149

//字符串排序

- (NSString*)signKey:(NSString *)params

{

    NSMutableString *paramMustr = [NSMutableString string];

    

    

   

        NSMutableArray *paramsMuArr = [[NSMutableArray alloc] init];

        for (int i = 0; i<params.length; i++)

        {

            unichar c = [params characterAtIndex:i];

            NSString * cStr = [NSString stringWithCharacters:&c length:1];

            [paramsMuArr addObject:cStr];

        }

        

        NSArray *paramsArr = [paramsMuArr sortedArrayUsingSelector:@selector(compare:)];

        

        for (int j = 0; j<[paramsArr count]; j++)

        {

            [paramMustr appendString:paramsArr[j]];

        }

        

    

    

    return  paramMustr;

}


//计算格林时间

    NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];

    NSTimeInterval a=[dat timeIntervalSince1970] * 1000;

    NSString *timeStt = [NSString stringWithFormat:@"%.0f", a];


iOS文件大小计算

阅读数 327