我正在尝试使用以下被调用的方法计算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;
}
这可能是一个愚蠢的问题,为什么这个简单的分工不起作用?再次,抱歉,如果这是一个愚蠢的问题,但它让我难过。我觉得我有点疯了。
非常感谢任何帮助,
问候,
麦克
答案 0 :(得分:3)
picRatio = ((float)picW/(float)picH);
Objective-c在分割之前需要正确的iVar类型赋值。 除2个整数时,输出不是浮点数,而是整数。
所以640/360 = 1.777,这被视为一个整数,所以十进制值是忽略,这给你1,你得到。
如果你做我写的,实际上会生成一个浮点数,并给你1.777输出。
答案 1 :(得分: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
答案 2 :(得分:0)
由于没有人发表正式答复,我认为我会这样做以帮助处于类似位置的任何人。对我的问题的评论使我走上了正确的轨道,经过进一步调查后,我发现编译器根据操作数的类型计算输出。因此,如果所有操作数都是整数,它会将int转换为目标,无论它是否为浮点数。解决方案:至少使一个操作数浮动。
希望这可以帮助处于类似位置的任何人。