根据NSString字符串长度自动改变UILabel的frame

  相信大家都遇到过这种需求。如果一个不慎,容易做成这个模样:

  话不多说,上代码。

  

  1.首先,设置UILabel的相关属性

1    UILabel *tmpLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 200, [UIScreen mainScreen].bounds.size.width - 20, 20)];
2     [tmpLabel setNumberOfLines:0];
3     [self.view addSubview:tmpLabel];

  就这些?就这些。只需要初始化,只需要设置行数为0,也就是行数无上限(自动换行)就可以添加到父视图上了。其他的UILabel的属性你想设置就设置,不想设置就设置上面这些就可以。

  2.根据字符串NSString获得UILabel的frame

    2.1 UILabel宽度不变,改变高度

1     //宽度不变,根据字的多少计算label的高度
2     NSString *str = @"可以更改此内容进行测试,宽度不变,高度根据内容自动调节";
3     CGSize size = [str sizeWithFont:tmpLabel.font constrainedToSize:CGSizeMake(tmpLabel.frame.size.width, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];
4     //根据计算结果重新设置UILabel的尺寸
5     [tmpLabel setFrame:CGRectMake(tmpLabel.frame.origin.x,tmpLabel.frame.origin.y, size.height, size.height)]; 6    [tmpLabel setText:str];

  使用sizeWithFont方法来获得CGSize。其中,宽度我们设置为我们UILabel的width;高度设置为MAXFLOAT,一个宏,代表CGFloat最大值;lineBreakMode设置为NSLineBreakByWordWrapping。这样就可以设置UILabel宽度不变,高度根据NSString改变了。

    2.2 UILabel高度不变,改变宽度

1   //高度固定不折行,根据字的多少计算label的宽度
2   NSString *str = @"高度不变获取宽度,获取字符串不折行单行显示时所需要的长度";
3   CGSize size = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(MAXFLOAT, label.frame.size.height)]; 4   //根据计算结果重新设置UILabel的尺寸
5   [label setFrame:CGRectMake(tmpLabel.frame.origin.x,tmpLabel.frame.origin.y, size.width, size.height)]; 6   label.text = str;

  同样的设置。唯一的不同在于我们不需要设置折行模式了。这样就设置成为UILabel高度不变,改变宽度了。

  3.如果是iOS7.0之后,它会提示你sizeWithFit这个方法被废弃了。提示我们使用下面的方法替代:

1   //宽度不变,根据字的多少计算label的高度
2   NSString *str = @"可以更改此内容进行测试,宽度不变,高度根据内容自动调节";
3   CGSize textSize = [str boundingRectWithSize:CGSizeMake(tmpLabel.frame.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:tmpLabel.font} context:nil].size;    

  改为boundingRectWithSize这个方法来改变字符串长度。通过更改options的参数NSStringDrawingOptions来决定是高固定改变宽度还是宽固定改变高度。

时间: 2024-10-10 18:44:07

根据NSString字符串长度自动改变UILabel的frame的相关文章

统计NSString中英文字符串长度

计算NSString的字符长度,用length方法Returns the number of Unicode characters in the receiver,既是英文字符和中文汉字都是一个字符长度,如@“abcde我的”长度为7,而此长度和微博的输入字数实际上是不符的,在微博中,它的长度为5(实际是4.5,“abcde我的f” 的长度也是5),所以如果在UITextView中限制字符的长度,需要重新计算,如下: -------------------- 转载:http://mobileso

自动补充方法:当字符串长度不够需要自动补充到一定的位数

1.代码 /** 自动补充方法:当字符串长度不够需要自动补充到一定的位数 @param mainString 需要补充的字符串 @param addDigit 补充到的位数 @param addString 补充的字符串 @param inPrefix 在字符串前还是在尾部补齐 @return 完整的字符串 */ - (NSString *)characterStringMainString:(NSString*)mainString AddDigit:(int)addDigit AddStri

JS~字符串长度判断,超出进行自动截取(支持中文)

今天一个小弟问我的问题,在文本框中输入字符,如果超出指定长度,就把它截取,要求中文等于两个字符的长度,我找一下资料,把这个功能实现了,下面是JS代码: <html> <script src="http://common.cnblogs.com/script/jquery.js" type="text/javascript"></script> <body> <input type="text"

ios不可改变NSString类和可改变NSMutableString类的使用

一, NSString的常用用法 1,创建对象两种方法 1)   "-"号方法  alloc + 初始化initWithString  NSString *str = [[NSString alloc] initWithString:@"iPhone 4"];  initWithFormat  这种方法比initWithString更强大可以设置格式,如上述的字符串" iPhone 4" 可以写成NSString *str = [[NSStrin

OC Foundation & NSString 字符串

一 Foundation 简介 Foundation 框架是苹果公司提供给开发人员,提高效率的的工作库. Foundation中提供了了多类,定义在头文件中.例如NSString类: #import <Foundation/NSSortDescriptor.h> #import <Foundation/NSStream.h> #import <Foundation/NSString.h> #import <Foundation/NSTextCheckingResu

NSString字符串全部API作用解释

iOS8最新API和一些生僻API,做了红色标注,便于大家查阅. //0.定义一个无符号整型 两个字节 范围[0,65535] typedef unsigned short unichar; //1.提前进入以下六个类告诉编译器,六个都是类的名称 @class NSData,NSArray,NSDictionary,NSCharacterSet,NSURL,NSError,NSLocale; //2.异常处理字符串,控制台出错信息报告 FOUNDATION_EXPORTNSString *con

NSString的长度比较方法(一)

NSString在OC上的比较方法和C语言中的有一些不相同, 来看看下面的例子吧~ #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSString *str = @"Hello, World!"; NSString *str2 = @"Hello, World!"; //对比字符串的长度大小, 比较两个字符串是否

黑马程序员---OC基础9【Foundation框架】【NSString介绍】【NSURL读写字符串】【NSString字符串比较】【NSString前后缀检查及搜索】【NSRange使用】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [Foundation框架] 1.Foundation框架介绍 1)Foundation框架概念 框架是由许多类.方法.函数.文档按照一定的逻辑组织起来的集合 以便使研发程序变得 更容易在OS X下的Mac操作系统中大约有80个框架为所有程序开发奠定基础的框架称为Foundation 框架 2)Foundation框架的作用 Foundation框架是Mac\iOS中其他框架的基础 Foundat

NSString字符串

NSString字符串的内容定义以后是不能修改的,是不可变的. 字符串的创建 //1.快速创建 NSString *str1=@"这是一个字符串!"; NSLog(@"str1=%@",str1); //2.alloc创建的字符串//以被1所替代 NSString *str2=[[NSString alloc]initWithString: @"通过alloc创建字符串"]; NSLog(@"str1=%@",str2); /