错误:错误的接收器类型'CGSize'(又名'struct CGSize')| Xcode 6.4 | iOS 8.4

时间:2015-08-31 16:13:28

标签: ios compiler-errors xcode6

我遇到了一个不赞成使用方法的问题,我正在尝试将其更改为一个正在运行的方法,但没有运气,有人知道如何解决这个问题吗?

问题在于我正在处理一个不属于我的代码,所以我不能很好地完成它。

这是原始代码(弃用的):

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')

非常感谢你!

2 个答案:

答案 0 :(得分:0)

你的问题在这一行:

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,这是不可能的,因为它不是一个对象。

答案 1 :(得分:0)

在您的实施文件中添加此方法:

-(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];