Tip
IOS Safari WebView 화면 확대 막기
Kir93
2023. 2. 9. 15:08
728x90
반응형
IOS10 이하 버전에서는 간단하게 user-scalble를 꺼주는 것 만으로 확대를 막을 수 있었습니다.
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
/>
하지만 이후 버전부터는 해당 내용으로는 막아지지 않습니다.
이제 적용할 수 있는 방법은 css에서 확대하는 동작 자체를 막아주는 겁니다.
touch-action: pan-y;
가로 터치를 막아주어 화면 확대를 못하게 막아주는 방법입니다.
이제 사용자 임의로 확대 축소를 할 수 없기 때문에 모든 게 끝이라고 생각되겠지만 또 변수가 있습니다.
사용자가 설정한 최소 폰트 이하(default 16px)의 input, select를 선택 시 자동으로 확대되는 문제가 있습니다.
이 문제의 경우 input, select의 font-size를 무조건 16px 이상으로 설정하면 되지만 사용자가 임의로 최소 폰트 크기를 늘리거나 하는 경우에는 적용되지 않고, 여러 이유로 불가능한 경우가 생깁니다.
이때 사용할 수 있는 방법은 무척 간단합니다.
// _app.tsx
// 설정한 모바일 최소 넓이 ex. 414px
const MINWIDTH = 414;
const App = () => {
...
const [widthRatio, setWidthRatio] = useState(100);
useEffect(() => {
if (typeof window !== 'undefined') {
setWidthRatio(screen.width / MINWIDTH);
}
}, [widthRatio]);
...
return (
...
<Head>
{widthRatio <= 1 && (
<meta
name="viewport"
content={`user-scalable=no, width=device-width, viewport-fit=auto,
initial-scale=${widthRatio || 1},
minimum-scale=${widthRatio || 1},
maximum-scale=${widthRatio || 1}`}
/>
)}
</Head>
...
);
...
이렇게 처리하면 기종과 상관없이 비율이 조정되기 때문에 확대를 막을 수 있습니다.
여기에 css를 통해 pan-y를 막아주면 보다 확실하게 확대 문제를 해결할 수 있습니다.
반응형