计算文本长度—boundingRectWithSize
来源:互联网 发布:linux epoll和read 编辑:程序博客网 时间:2024/06/06 15:45
计算文本CGSize方法:
/*
* 设置文本CGSize
*
* @param string 文本内容
* @param fontSize 字体大小,需跟lable字体大小一致,否则会出现显示不全等问题
* @param width 宽度
* @param isBold 是否加粗
* @param style 文字内容设计(间距等)
* @param identify 计算高度缓存标识
*
* @return 文本大小
*/
- (CGSize)sizeForString:(NSString *)string fontOfSize:(CGFloat)fontSize wordWidth:(CGFloat)width bold:(BOOL)isBold paragraphStyle: (NSMutableParagraphStyle *)style cacheIdentify: (NSString *)identify {
CGFloat contentWidth = width;
UIFont *font;
if (isBold == YES) {
font = [UIFont boldSystemFontOfSize:fontSize];
}else{
font = [UIFont systemFontOfSize:fontSize];
}
NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,style,NSParagraphStyleAttributeName,nil];
NSString *content = string;
/*设置文本范围:
*boundingRectWithSize属性:限定文本在固定范围内进行显示
*contentWidth:代表最大宽度,到了最大宽度则换到下一行
*CGFLOAT_MAX:代表长度不限
*绘制文本时使用 NSStringDrawingUsesLineFragmentOrigin
*context属性:文本上下文。可调整字间距以及缩放等。最终,该对象包含的信息将用于文本绘制。该参数可为nil
*/
CGSize size = [content boundingRectWithSize:CGSizeMake(contentWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size;
return size;
}
使用示例代码:
-(void)myTableViewCellAddData{
NSArray* titleArray = @[@"WEPLUS北京 浦项中心",@"WEPLUS酷窝北京 光华路SOHO二期",@"WEPLUS北京 三元桥",@"北京 D9X 望京",@"北京 D9X 奥体",@"北京共作室Coffizz",@"北京 D9X Dream Lab"];
CGFloat buttonPositionX = 15, buttonPositionY = 0;
for (int i = 0; i < titleArray.count; i++) {
//计算文本CGSize
CGSize spaceNameSize = [self sizeForString:titleArray[i] fontOfSize:12 wordWidth:SCREEN_WIDTH bold:NO paragraphStyle:nil cacheIdentify:nil];
if (buttonPositionX + spaceNameSize.width + 35 > SCREEN_WIDTH) {
buttonPositionX = 15;
buttonPositionY += 42;
}
UIButton* spaceButton = [UIButton buttonWithType:UIButtonTypeCustom];
//通过文本的CGSize可计算出每个spaceButton的长度和frame
spaceButton.frame = CGRectMake(buttonPositionX, buttonPositionY, spaceNameSize.width + 20, 27);
spaceButton.layer.borderWidth = 0.5;
spaceButton.layer.borderColor = [[UIColor hex_929292_Color] colorWithAlphaComponent:0.5].CGColor;
[spaceButton setTitleColor:[UIColor hex_3A3B3C_Color] forState:UIControlStateNormal];
spaceButton.titleLabel.font = [UIFont systemFontOfSize:12];
[spaceButton setTitle:titleArray[i] forState:UIControlStateNormal];
[self.contentView addSubview:spaceButton];
if (buttonPositionX + spaceNameSize.width + 35 < SCREEN_WIDTH){
buttonPositionX += spaceNameSize.width + 35;
}
}
}
//设置文本CGSize
- (CGSize)sizeForString:(NSString *)string fontOfSize:(CGFloat)fontSize wordWidth:(CGFloat)width bold:(BOOL)isBold paragraphStyle: (NSMutableParagraphStyle *)style cacheIdentify: (NSString *)identify {
CGFloat contentWidth = width;
UIFont *font;
if (isBold == YES) {
font = [UIFont boldSystemFontOfSize:fontSize];
}else{
font = [UIFont systemFontOfSize:fontSize];
}
NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,style,NSParagraphStyleAttributeName,nil];
NSString *content = string;
CGSize size = [content boundingRectWithSize:CGSizeMake(contentWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size;
return size;
}
效果图:
- 计算文本长度—boundingRectWithSize
- iOS7 boundingRectWithSize 计算文本尺寸
- iOS:中计算文本尺寸(boundingRectWithSize)
- 通过boundingRectWithSize:options:attributes:context:计算文本尺寸
- ios7,使用boundingRectWithSize方法计算文本正确的size
- boundingRectWithSize 7.0以后计算文本高度的方法
- TextKit学习 通过boundingRectWithSize:options:attributes:context:计算文本尺寸
- 学习boundingRectWithSize:options:attributes:context:计算文本尺寸
- 通过boundingRectWithSize:options:attributes:context:计算文本尺寸
- UILable的使用,文本高度的计算boundingRectWithSize
- iOS方法:boundingRectWithSize:options:attributes:context:(计算文本尺寸)
- 计算文本长度
- 计算文本长度
- .net 计算文本长度
- 使用 FontMetrics 计算文本长度
- 使用 FontMetrics 计算文本长度
- boundingRectWithSize计算label 高度
- TextKit学习(四)通过boundingRectWithSize:options:attributes:context:计算文本尺寸
- Objective-C 实现的界面筛选效果 NinaSelectionView
- Linux man的用法
- 【线段树优化建图+费用流Spfa增广】BZOJ4276(ONTAK2015)[Bajtman i Okrągły Robin]题解
- UDP广播与组播通信
- 从零开始掌握Python机器学习:十四步教程
- 计算文本长度—boundingRectWithSize
- 第六封信 / 我把愧疚写成最后一封信
- 杭电1015
- fastDFS
- 给定两个正整数,计算这两个数的最小公倍数。
- 西门子智能制造挑战赛小结
- n个2*1小矩形无重叠覆盖2*n大矩形(递归,思路分析及代码实现,斐波那契数列衍生)
- xml的Schema扩展
- 【C语言】动态内存分配