【问题标题】:Storing an integer as an instance variable将整数存储为实例变量
【发布时间】:2012-11-12 01:24:36
【问题描述】:

我非常接近这个。基本上我要做的是为我的 UIWebView 返回单元格的高度。我在我的 NSLOG 上打印了正确的高度。现在的问题是我需要在那个高度之外制作一个变量。到目前为止还没有运气。这是我现在拥有的。

- (void)webViewDidFinishLoad:(UIWebView *)webView {
_descriptionWebView.frame = CGRectMake(_descriptionWebView.frame.origin.x, _descriptionWebView.frame.origin.y, _descriptionWebView.frame.size.width, 1);
CGSize fittingSize = [_descriptionWebView sizeThatFits:CGSizeZero];
_descriptionWebView.frame = CGRectMake(_descriptionWebView.frame.origin.x, _descriptionWebView.frame.origin.y, _descriptionWebView.frame.size.width, fittingSize.height);

NSLog(@" Fitting Size is : %f", fittingSize.height);
}

它打印出将在 UIWebView(在 UITableViewCell 内)显示的每篇文章的完美尺寸。我的主要问题是如何在 -

中返回该高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == SectionHeaderTitle) {

    // Regular
    return 54;

} else {

    return 612;
}
}

我尝试使用 NSNumber、NSInteger、CGFloat、CGRect、CGSize 来制作一个 FittingSize 的实例变量......基本上我得到了“不兼容的结果类型”。

最终我想要的是return fittingSize.height;

到那里有什么帮助吗?非常感谢您提前。希望我没有遗漏任何内容!

【问题讨论】:

  • CGSize 是一个结构体。理论上,您可以从中创建实例变量,但不能创建属性。最好把高宽分开存放,都是普通的浮点数。
  • 在您尝试将它设为实例变量时,向我们展示您对fittingSize 的声明。

标签: objective-c ios uitableview uiwebview


【解决方案1】:

CGSize.height 是一个 CGFloat。你从哪里得到“不兼容的结果类型”?

您应该能够在您的界面中声明一个 CGFLoat 变量 CGFloat fittingHeight;,然后在您的 -webViewDidFinishLoad 中分配它:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
_descriptionWebView.frame = CGRectMake(_descriptionWebView.frame.origin.x, _descriptionWebView.frame.origin.y, _descriptionWebView.frame.size.width, 1);
CGSize fittingSize = [_descriptionWebView sizeThatFits:CGSizeZero];
_descriptionWebView.frame = CGRectMake(_descriptionWebView.frame.origin.x, _descriptionWebView.frame.origin.y, _descriptionWebView.frame.size.width, fittingSize.height);

fittingHeight = fittingSize.height;
}

然后在-tableView:heightForRowAtIndexPath:中使用。

【讨论】:

  • ` _fittingHeight = &fittingSize.height;` 是它建议我做的。 `returnfittingSize.height;` 让我在-tableView:heightForRowAtIndexPath: 中使用未声明的标识符 'fittingSize
  • @Miles - 你没有向我们展示什么。您如何尝试声明fittingSize?
  • @Miles 那是因为您在-webViewDidFinishLoad: 中将fittingSize 声明为局部变量,在-tableView:heightForRowAtIndexPath: 中无法访问它。您应该声明一个类变量CGFloat fittingHeight 并将高度存储在那里,或者在您的界面(.h)中声明一个类变量CGSize fittingHeight
  • in .h - @property (nonatomic) CGFloat *fittingHeight; in .m - _fittingHeight = fittingSize.height; 这给了我一个错误“Assigning to 'CGFloat *'(aka 'float *') from in compatible type 'CGFloat' (aka ' float'); 使用 & _fittingHeight = &fittingSize.height; 获取地址是它自动修复的,但是当我尝试在 -tableView:heightForRowAtIndexPath: 中返回 _fittingHeight 时,它也会给我一个错误 Returning 'CGFloat *'(aka 'float *' ) 来自具有不兼容结果类型“CGFloat”(又名“Float”)的函数;使用 * 取消引用
  • 存储 CGFloat 的类变量有效。感谢您的耐心等待!
【解决方案2】:

创建一个CGFloat类型的类级变量并在

    - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
      //Get the value of fittingsize.height
    }

将fittingsize.height 的值保存在该变量中并在

中使用该变量
    -tableView:heightForRowAtIndexPath:indexpath
    {
      //Use the value stored of the CGFloat variable above
    }

【讨论】:

  • 这也是绝对正确的答案。需要点赞。
【解决方案3】:

像这样强制将其转换为 CGFloat:

return (CGFloat)(fittingSize.height);

【讨论】:

  • fittingSize 是一个 CGSize,所以fittingSize.height 已经是一个 CGFloat。那个演员什么都不做。
  • 你试过了吗?我无法想象在返回显式 CGFloat 后得到相同的“不兼容的结果类型”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 2010-10-10
  • 2015-04-26
相关资源
最近更新 更多