错误:错误的接收器类型"CGSize"(又名"结构 CGSize")|Xcode 6.4 |iOS 8.4



我有一个过时的方法的问题,我正试图改变它为一个工作现在,但没有运气,有人知道如何解决这个问题?

问题是我正在编写的代码不是我的,所以我不能很好地理解它。

这是原始代码(已废弃的):

CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; 
CGSize maxSize = CGSizeMake(maxWidth, remainingHeight);
CGSize detailsLabelSize = [detailsLabel.text sizeWithFont:detailsLabel.font
                            constrainedToSize:maxSize lineBreakMode:detailsLabel.lineBreakMode];
这是我的解决方案(抛出错误的):
CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; 
CGSize maxSize = CGSizeMake(maxWidth, remainingHeight);
CGSize detailsLabelSize = [[detailsLabel.text sizeWithAttributes:@{NSFontAttributeName:detailsLabel.font}]constrainedToSize:maxSize lineBreakMode:detailsLabel.lineBreakMode];

错误是在标题(坏接收器类型'CGSize'(又名'struct CGSize'))

非常感谢!

将此方法添加到您的实现文件中:

-(CGSize)frameForText:(NSString*)text sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode  {
    NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
    paragraphStyle.lineBreakMode = lineBreakMode;
    NSDictionary * attributes = @{NSFontAttributeName:font,
                                  NSParagraphStyleAttributeName:paragraphStyle
                                  };

    CGRect textRect = [text boundingRectWithSize:size
                                         options:NSStringDrawingUsesLineFragmentOrigin
                                      attributes:attributes
                                         context:nil];
    return textRect.size;
}

然后将代码改为:

CGSize detailsLabelSize = [self frameForText:detailsLabel.text sizeWithFont:detailsLabel.font constrainedToSize:maxSize lineBreakMode:detailsLabel.lineBreakMode];

您的问题在这一行:

CGSize detailsLabelSize = [[detailsLabel.text sizeWithAttributes:@{NSFontAttributeName:detailsLabel.font}]constrainedToSize:maxSize lineBreakMode:detailsLabel.lineBreakMode];

[detailsLabel.text sizeWithAttributes:@{NSFontAttributeName:detailsLabel.font}]返回一个非对象的CGSize。然后你试图调用constrainedToSize:maxSize lineBreakMode:detailsLabel.lineBreakMode在这个CGSize上,这是不可能的,因为它不是一个对象。

最新更新