我有一个UILabel
,其文字是动态生成的,因此根据文字,UILabel
宽度会从iOS6 to iOS8
增加。这有什么解决方案吗?它仅适用于iOS7和iOS6.0 boundingRectWithSize
方法崩溃,仅适用于iOS7.0及更高版本的boundingRectWithSize
方法。
float widthIs =[[tagsArray objectAtIndex:i] boundingRectWithSize:_tagsValue.frame.size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:_tagsValue.font } context:nil].size.width;
_tagsValue.frame=CGRectMake(prevTag, 2, widthIs+20, 30);
prevTag+=widthIs+30;
答案 0 :(得分:1)
使用此功能,这将适用于IOS6& IOS 7。但我不确定IOS8,因为我没有在IOS8上测试它。
float width = [LABEL_TEXT_STRING sizeWithFont:LABEL_FONT constrainedToSize:DEFAULT_SIZE_OF_LABEL lineBreakMode:LABEL.lineBreakMode].width;
答案 1 :(得分:1)
你需要检查iOS6和iOS7,
if([[[tagsArray objectAtIndex:i] respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]){ float widthIs =[[tagsArray objectAtIndex:i] boundingRectWithSize:_tagsValue.frame.size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:_tagsValue.font } context:nil].size.width; _tagsValue.frame=CGRectMake(prevTag, 2, widthIs+20, 30); prevTag+=widthIs+30; } else{ float widthIs = [[[tagsArray objectAtIndex:i] sizeWithFont:font constrainedToSize:(CGSize){CGFLOAT_MAX, CGFLOAT_MAX}]; }
答案 2 :(得分:-1)
使用此方法获取宽度
将您的标签作为参数传递
- (CGFloat)getWidth:(UILabel *)label{
CGSize sizeOfText = [label.text boundingRectWithSize: CGSizeMake(CGFLOAT_MAX, self.bounds.size.height)
options: (NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes: [NSDictionary dictionaryWithObject:label.font
forKey:NSFontAttributeName]
context: nil].size;
return sizeOfText.width;
}