1

我正在尝试使用以下被调用的方法来计算 UITableViewCell 和 UIImageView 的适当高度:

-(void)ratioCalculator
{
picH = image.size.height;
picW = image.size.width;

NSLog(@"%d = width %d = height", picW, picH);
picRatio = (picW/picH);
NSLog(@"%F", picRatio);
imageViewH = (260/picRatio);
NSLog(@"%d int", imageViewH);

return;
}

问题是,当它被调用时,picRatio = (picW/picH);似乎并没有像控制台所说的那样发生:

2012-11-18 21:56:48.787 Name[5374:c07] 640 = width 360 = height
2012-11-18 21:56:48.788 Name[5374:c07] 1.000000
2012-11-18 21:56:48.788 Name[5374:c07] 260 int

1.000000 是浮点数picRatio,260 是imageViewH. 显然,这意味着 UITableViewCell 和 UIImageView 都使用了不正确的高度,计算如下:

else {
        [self ratioCalculator];
        return (imageViewH + 20);
     }

- (void)showImage:(UIImage *)theImage
{
    self.imageView.image = theImage;
    self.imageView.hidden = NO;
    [self ratioCalculator];
    self.imageView.frame = CGRectMake(10, 10, 260, imageViewH);
    self.photoLabel.hidden = YES;
}

这可能是一个愚蠢的问题,为什么这个简单的除法不起作用?再次,对不起,如果这是一个愚蠢的问题,但它让我难住了。我觉得我快要疯了。

任何帮助将不胜感激,
问候,
迈克

4

3 回答 3

3
picRatio = ((float)picW/(float)picH);

Objective-c 在划分之前需要正确的 iVar 类型分配。当您将 2 个整数相除时,输出不是浮点数,而是整数。

所以 640/360 = 1.777 这被视为一个整数,所以十进制值被忽略,这给你 1,你得到。

如果你按照我写的去做,实际上会产生一个浮点数,并给你 1.777 的输出。

于 2012-11-18T22:42:23.083 回答
2

您缺少的是将整数转换为浮点数以进行浮点除法

picRatio = (picW/picH); // gives an int division if picW and picH are declared integers

picRatio = (float)(picW)/picH; // gives you a floating point division
于 2012-11-18T22:45:03.843 回答
0

由于没有人发布官方答案,我想我会这样做以帮助处于类似位置的任何人。对我的问题的评论使我走上了正轨,经过进一步调查,我发现编译器根据操作数的类型计算输出。因此,如果所有操作数都是整数,它会将一个整数转换为目标,无论它是否为浮点数。解决方案:至少将您的一个操作数设为浮点数。

希望这可以帮助任何处于类似位置的人。

于 2012-11-18T22:44:57.250 回答