跳转到主要内容

布局测量

有时,您需要测量当前布局,以便对整体布局应用一些更改,或者做出决策并调用一些特定的逻辑。

React Native 提供了一些原生方法来获取视图的尺寸信息。

调用这些方法的最佳方式是在 useLayoutEffect Hook 中:这将为您提供最新的尺寸值,并允许您在计算尺寸的同一帧中应用更改。

典型的代码如下所示

tsx
function AComponent(children) {
const targetRef = React.useRef(null)

useLayoutEffect(() => {
targetRef.current?.measure((x, y, width, height, pageX, pageY) => {
//do something with the measurements
});
}, [ /* add dependencies here */]);

return (
<View ref={targetRef}>
{children}
<View />
);
}
注意

这里描述的方法在 React Native 提供的绝大多数默认组件上都可用。但是,它们*不*适用于非原生视图直接支持的复合组件。这通常包括您在自己的应用中定义的大多数组件。

measure(callback)

确定给定视图在视口中的屏幕位置(xy)、widthheight。通过异步回调返回这些值。如果成功,回调将被调用并带有以下参数

  • x:被测量视图在视口中原点(左上角)的 x 坐标。
  • y:被测量视图在视口中原点(左上角)的 y 坐标。
  • width:视图的宽度。
  • height:视图的高度。
  • pageX:视图在视口(通常是整个屏幕)中的 x 坐标。
  • pageY:视图在视口(通常是整个屏幕)中的 y 坐标。

同样,measure() 返回的 widthheight 是组件在视口中的宽度和高度。

measureInWindow(callback)

确定给定视图在窗口中的位置(xy),并通过异步回调返回这些值。如果 React 根视图嵌入在另一个原生视图中,这将为您提供绝对坐标。如果成功,回调将被调用并带有以下参数

  • x:视图在当前窗口中的 x 坐标。
  • y:视图在当前窗口中的 y 坐标。
  • width:视图的宽度。
  • height:视图的高度。