总之,为了在将来节省一些时间,我想出了一个快速而肮脏的方法来解决这个问题:
logoSize(width, height) {
var maxWidth = 110;
var maxHeight = 30;
if (width >= height) {
var ratio = maxWidth / width;
var h = Math.ceil(ratio * height);
if (h > maxHeight) {
// Too tall, resize
var ratio = maxHeight / height;
var w = Math.ceil(ratio * width);
var ret = {
'width': w,
'height': maxHeight
};
} else {
var ret = {
'width': maxWidth,
'height': h
};
}
} else {
var ratio = maxHeight / height;
var w = Math.ceil(ratio * width);
if (w > maxWidth) {
var ratio = maxWidth / width;
var h = Math.ceil(ratio * height);
var ret = {
'width': maxWidth,
'height': h
};
} else {
var ret = {
'width': w,
'height': maxHeight
};
}
}
return ret;
}
这将获取图像的宽度和高度,进行一些比率计算,并根据顶部的maxWidth和maxHeight变量吐出一组尺寸.然后,您可以采用上述方法给出的尺寸,并将其应用于图像元素,例如:
var dims = logoSize(244,127);
<Image style={[styles.logo, {width:dims.width, height:dims.height}]} source={{uri:'/path/to/image.png}} />
由于计算循环,您可能需要对样式应用resizeMode:"contain".标志在你的样式表中.
希望这能节省一些时间.