我的项目中有一个以下的util方法。我在iOS 10的早期版本中没有遇到任何问题。
+ (CGRect)boundsRectWithSize:(id)objView
{
return [[objView text] boundingRectWithSize:CGSizeMake([objView bounds].size.width, CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
attributes:@{ NSFontAttributeName : [objView font]}//Issue in this line
context: nil];
}
objView可以是UIlabel
,UITextView
,UItextField
但在iOS 10中,应用程序无法使用以下错误进行编译
Collection element of type 'CFTypeRef _Nullable' (aka 'const void *') is not an Objective-C object
答案 0 :(得分:2)
首先我认为它是UILabel,所以我说要在属性字典中将它强制转换为UILabel。但它可以是UILabel,UITextView和UITextField中的任何一种,如你所说。因此,您可以先使用valueForKey:
方法获取字体,然后在属性字典中使用此字体。
+ (CGRect)boundsRectWithSize:(id)objView
{
UIFont *font= (UIFont *)[objView valueForKey:@"font"];
return [[objView text] boundingRectWithSize:CGSizeMake([objView bounds].size.width, CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
attributes:@{ NSFontAttributeName : font}//Issue in this line
context: nil];
}