/** * iOS 虚拟键盘处理 Hook * * iOS Safari 键盘弹起时 window.innerHeight 不变, * 需用 visualViewport.height 来检测实际可用高度。 * Android 键盘弹起会直接 resize viewport,CSS 自动处理。 */ import { useState, useEffect } from 'react'; export function useVirtualKeyboard() { const [keyboardHeight, setKeyboardHeight] = useState(0); useEffect(() => { const viewport = window.visualViewport; if (!viewport) return; const handler = () => { const kh = Math.max(0, window.innerHeight - viewport.height - viewport.offsetTop); setKeyboardHeight(kh); }; viewport.addEventListener('resize', handler); viewport.addEventListener('scroll', handler); return () => { viewport.removeEventListener('resize', handler); viewport.removeEventListener('scroll', handler); }; }, []); return { keyboardHeight }; }