布局测量
有时,您需要测量当前布局以对整体布局应用一些更改,或做出决策并调用一些特定逻辑。
React Native 提供了一些原生方法来了解视图的测量结果。
调用这些方法的最佳方式是在 useLayoutEffect
钩子中:这将为您提供这些测量的最新值,并允许您在计算测量结果的同一帧中应用更改。
典型的代码如下所示
function AComponent(children) {
const targetRef = React.useRef(null)
useLayoutEffect(() => {
targetRef.current?.measure(({measurements}) => {
//do something with the `measurements`
});
}, [ /* add dependencies here */]);
return (
<View ref={targetRef}>
{children}
<View />
);
}
注意
此处描述的方法在 React Native 提供的大多数默认组件上可用。但是,它们在不直接由原生视图支持的组合组件上不可用。这通常包括您在自己的应用程序中定义的大多数组件。
measure(callback)
确定给定视图在视口中屏幕上的位置 (x
和 y
)、width
和 height
。通过异步回调返回这些值。如果成功,则回调将使用以下参数调用
x
:视口中测量的视图原点(左上角)的x
坐标。y
:视口中测量的视图原点(左上角)的y
坐标。width
:视图的width
。height
:视图的height
。pageX
:视口中视图的x
坐标(通常是整个屏幕)。pageY
:视口中视图的y
坐标(通常是整个屏幕)。
此外,measure()
返回的 width
和 height
是组件在视口中的 width
和 height
。
measureInWindow(callback)
确定给定视图在窗口中的位置 (x
和 y
),并通过异步回调返回这些值。如果 React 根视图嵌入在另一个原生视图中,这将为您提供绝对坐标。如果成功,则回调将使用以下参数调用
x
:视图在当前窗口中的x
坐标。y
:视图在当前窗口中的y
坐标。width
:视图的width
。height
:视图的height
。