一个非常简单的视图:
所以宽度和高度略有偏差。通常我会说这并不是很重要,因为它小于一个像素,但问题是对于我的应用程序来说,这似乎会导致非常丑陋的显示错误,其中一些应该无缝拼合的瓷砖之间有一些非常小的边距。
。
import React from "react";
import { View } from "react-native";
export default function App() {
return (
<View
onLayout={(layout) => {
console.log(layout.nativeEvent);
}}
style={{
width: 371,
height: 477,
}}
></View>
);
}
我只是制作了一个视图,宽度为371,高度为477,然后记录其布局。当我在我的实际iPhone 5s设备上使用expo运行时,我得到以下输出:
{
"layout": Object {
"height": 477,
"width": 371,
"x": 0,
"y": 0,
},
"target": 3,
}
这是正确的。但是当我在一个屏幕大小为1080x1920:420dpi的安卓Pixel 2模拟器上运行它时(我没有实际的安卓设备),我得到以下输出:
Object {
"layout": Object {
"height": 476.952392578125,
"width": 371.047607421875,
"x": 0,
"y": 0,
},
"target": 3,
}
所以宽度和高度略有偏差。通常我会说这并不是很重要,因为它小于一个像素,但问题是对于我的应用程序来说,这似乎会导致非常丑陋的显示错误,其中一些应该无缝拼合的瓷砖之间有一些非常小的边距。
实际上,我不确定这是否是原因。然而,它似乎是一个非常可疑的候选者。有什么办法可以解决这个问题吗?
编辑:
更多详细信息以重现图像中的像素插值错误。正如我所说,本帖中描述的问题似乎是导致此问题的原因,但我不百分之百确定。无论如何,上述场景都非常奇怪。
因此,对于以下代码(7x9个53像素大的视图网格,应该无缝添加在一起):
import React from "react";
import { View } from "react-native";
export default function App() {
let cell_size = 53;
let width = 7;
let height = 9;
let rows = [];
for (let i = 0; i < height; i++) {
let row_elms = [];
for (let j = 0; j < width; j++) {
row_elms.push(
<View
key={"key" + j + "_" + i}
style={{
width: cell_size,
height: cell_size,
backgroundColor: "white",
}}
></View>
);
}
rows.push(
<View
key={"row" + i}
style={{
width: cell_size * width,
height: cell_size,
flexDirection: "row",
}}
>
{row_elms}
</View>
);
}
return (
<View
style={{
justifyContent: "center",
alignItems: "center",
height: "100%",
width: "100%",
backgroundColor: "black",
}}
>
<View style={{ width: cell_size * width, height: cell_size * height }}>
{rows}
</View>
</View>
);
}
我在安卓和iOS上得到了这些输出:
我可以通过使用 Expo 中的元素检查器(或者使用上面的日志记录方法)来验证问题是否发生,例如,1. 容器的大小不完全正确,而且我注意到一些网格单元格的大小也不正确,正如您在下面这些使用元素检查器的截图中所看到的:![enter image description here](https://istack.dev59.com/knLZh.webp)