【问题标题】:Error: bad receiver type 'CGSize' (aka 'struct CGSize') | Xcode 6.4 | iOS 8.4错误:错误的接收器类型“CGSize”(又名“struct CGSize”)| Xcode 6.4 | iOS 8.4
【发布时间】:2015-08-31 16:13:27
【问题描述】:

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

问题是我正在编写一个不是我的代码,所以我不太明白。

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

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

非常感谢!

【问题讨论】:

  • 它会抛出什么错误?
  • @Sebydd 标题中的那个
  • 你从哪里得到'maxSize'?
  • 前一行,我加一下
  • 你在运行时收到了吗?

标签: ios compiler-errors xcode6


【解决方案1】:

在你的实现文件中添加这个方法:

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

【讨论】:

    【解决方案2】:

    你的问题出在这一行:

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

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

    【讨论】:

    • 是的,我也想过类似的事情(至少我没有我想的jaja那么迷茫),但我不知道如何解决它,抱歉,我对 Objective- 太陌生了C :c 有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多