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;
}
3 回答
全部 - 为了将来可能节省一些时间,这是一个快速而肮脏的方法,我想出来解决这个问题:
这将采用图像的宽度和高度,运行一些比率计算,并根据顶部的maxWidth和maxHeight变量吐出一组尺寸 . 然后,您可以采用上述方法提供的尺寸并将其应用于Image元素,例如:
由于计算轮次,您可能需要将resizeMode:'contains'应用于样式表中的styles.logo .
希望这能节省一些时间 .
这很有可能,但不要指望反应原生照顾一切 . 您可能希望编写一个小算法来实现此目的 .
resizeMode="contain"
的作用是检查图像的大小是否大于/小于容器 . 如果它大于容器,它将调整大小以适合容器 . 如果它小于容器,它将按原样呈现 .关于图像的对齐,反应原生并不真正关心 . 图像放置在容器的中间 . 如果要将图像左对齐放置,则必须编写一个小算法,该算法会比较图像的实际尺寸和容器的尺寸 .
例如 . 如果图像的高度大于容器,请将图像的高度设置为等于容器的高度,并使用"aspect ratio"计算容器的宽度 . Read this以清楚地了解您将要做的事情 .
此外,请使用
position: 'absolute'
以更好地满足您的需求 . 祝好运!Edit: 很抱歉没有为您提供现成的解决方案 . 您可能会在谷歌上找到所需的算法 . 我只是朝着正确的方向推开你 .
我通过以下方式解决了类似的任务 . 首先,您需要设置初始图像样式:
这将呈现我们想要在特定onLayout回调中捕获的Image的原始大小 . 所以诀窍是以下列方式实现该回调:
其中IMAGE_HEIGHT是图像容器的恒定高度 . 现在,您只需使用状态替换初始图像样式:
而已 . 在您的情况下,您可能还需要在另一个视图中包装图像 . 希望这会有所帮助 .
祝好运!