【ios h5踩坑】关于ios上嵌入h5导致input聚焦时页面自动放大问题

目录

问题描述

问题分析

解决方案

?

问题描述

最近有一个项目需要给ios和安卓app开发h5页面,在安卓上测试没有问题,但是ios(iphone8)上点击输入框会导致页面缩放失败,但在iphone 8plus/x上不会产生这种问题。并且设置 <meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width" /><meta name="apple-mobile-web-app-capable" content="yes" />均无法阻止这种问题

问题分析

导致页面自动缩放的问题来源于,ios在小屏设备(如iphone 5s/6/6s/7/8...)上点击输入框的时候,如果input字体小于16px的时候会自动放大页面,提升阅读性。但实际不同场景下,我们的ui设计字体可能低于16px。

解决方案

现在的解决方案基本上搜出来的都是设置meta,这种方案并不能解决小于16px字体产生放大页面的问题,那么我们不得不思考问题的根源字体不够16px。

那么我们要做的就是在点击input的时候,把input的字体设置为16px,然后focus的时候再改回我们自己的,在那一瞬间,ios判断到input输入框字体为16px,从而不放大我们的页面,伪代码如下:

import React, { memo, useState, useCallback } from 'react'

const Test = memo(() => {
    const [value, setValue] = useState('')

    const handleInputChange = useCallback(e => {
        setValue(e.target.value)
    })

    /** 解决ios 字体小于16px自动缩放问题 */
    const handleInputMouseDown = useCallback((e) => {
        e.target.style.fontSize = '16px' // mouse down时,把字体改为16px,使得ios不会自动放大页面
    }, [])

    /** 解决ios 字体小于16px自动缩放问题 */
    const handleInputFocus = useCallback((e) => {
        e.target.style.fontSize = '' // focus时,把字体恢复为原先的字体
    }, [])

    return (
        <>
            <input
                value={value}
                placeholder="字体为14px场景"
                onChange={handleInputChange.bind(this) }
                onMouseDown={handleInputMouseDown.bind(this)}
                onFocus={handleInputFocus.bind(this)}
             />
        </>
    )
})

export default Test

原文地址:https://www.cnblogs.com/fe-linjin/p/11877099.html

时间: 2024-10-07 00:58:52

【ios h5踩坑】关于ios上嵌入h5导致input聚焦时页面自动放大问题的相关文章

微信公众号弹出框在IOS最新系统中点击键盘上的“完成”导致事件无法触发问题

微信公众号弹出框在IOS最新系统中点击键盘上的"完成"导致事件无法触发问题 问题描述 微信公众号中有项功能是弹框模态框,输入信息后保存操作.但是在IOS系统中发现,当输入内容后,点击键盘上的"完成"后,再点击"提交"无反应:跳过"完成"直接点击"提交"就可以正常保存 问题原因 当键盘弹出后,会将body向上弹起:但是点击"完成"后并没有将body拉回,导致点击事件不在body内而无法触发

H5踩坑系列(一)

提到移动端适配,首先心里可能会问,我们为什么要做移动端的适配,怎么去做移动端端的适配 我们为什么要进行移动端的适配 首先一个页面在pc上边打开,是正常显示的,但是我们用手机打开的时候,由于手机的屏幕尺寸并不能完整的吧页面全部显示出来,就算是手动进行缩放也会出现比如说滚动条,页面布局错乱等等各种五花八门的问题,对于用户的体验非常的不好 于是乎就有了移动端的适配, 移动端适配的目的是在不同尺寸的设备上,页面达到合理的展示(自适应)或者说是能够保持统一效果. 在我们了解移动端适配之前 我们首先要先了解

Office Web addin 踩坑计:替换后台网站为MVC框架时遇到的问题

Office Web Addin 模板程序的后台本质上是一个网站,你在调试的时候可以发现它的进程是一个32位的IE进程 所以可以把它替换成Asp.net的网站. 替换方法: 1.点击WordReview-WordAddin 2.按下F4键 3.在属性窗口的Web Project那一行里选择成新建的Asp.net项目 4.删除掉原来的Web项目 5.成了! 但是呢调试运行的时候出了个小错误! 错误如图所示: 为啥呢? 因为WebAddin的配置文件里原来的属性还没改... 那要咋整呢? 简单 删了

react native 踩坑之 SectionList state更新 不执行render重新渲染页面

官方文档中指出 SectionList 本组件继承自PureComponent而非通常的Component,这意味着如果其props在浅比较中是相等的,则不会重新渲染.所以请先检查你的renderItem函数所依赖的props数据(包括data属性以及可能用到的父组件的state),如果是一个引用类型(Object或者数组都是引用类型),则需要先修改其引用地址(比如先复制到一个新的Object或者数组中),然后再修改其值,否则界面很可能不会刷新.(译注:这一段不了解的朋友建议先学习下js中的基本

vivo手机的坑-禁止微信浏览器网页点击图片,图片会自动放大

这个坑让我郁闷极了,之前我的手机在微信浏览器打开网页点击图片时,啥事也没有 现在,咋回事,变了呢! 现在我打开微信浏览器网页面html,点击一个img标签的图片,图片会自动满屏放大,吓死宝宝了.其他人的手机就咋没有这个问题呢,我的pie手机 这种事情的发生有时候是让我高兴的,但是有时候是悲伤的(若是我需要给一个按钮添加点击事件且按钮里存在img标签时,太TMD悲伤了): 现在终于解决了这种事情的发生!!!! 移动端禁止图片长按和vivo手机点击img标签放大图片,禁止长按识别二维码或保存图片 i

iOS开发-OpenGLES 入门踩坑

Flat coloring(单色) 是通知OpenGL使用单一的颜色来渲染,OpenGL将一直使用指定的颜色来渲染直到你指定其它的颜色. 指定颜色的方法为 public abstract void glColor4f(float red, float green, float blue, float alpha). 缺省的red,green,blue为1,代表白色. Smooth coloring (平滑颜色过渡) 当给每个顶点定义一个颜色时,OpenGL自动为不同顶点颜色之间生成中间过渡颜色(

iOS WKWebView 那些坑

导语 WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用.内存泄漏的 UIWebView.WKWebView 拥有60fps滚动刷新率.和 safari 相同的 JavaScript 引擎等优势. 简单的适配方法本文不再赘述,主要来说说适配 WKWebView 过程中填过的坑以及善待解决的技术难题. 1.WKWebView 白屏问题 WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一

OS X 和iOS 中的多线程技术(上)

OS X 和iOS 中的多线程技术(上) 本文梳理了OS X 和iOS 系统中提供的多线程技术.并且对这些技术的使用给出了一些实用的建议. 多线程的目的:通过并发执行提高 CPU 的使用效率,进而提供程序运行效率. 1.线程和进程 进程 什么是进程 进程是指在计算机系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行中其专用且受保护的内存空间内 比如同时打开 Xcode .Safari ,系统就会分别启动两个进程 通过活动监视器可以查看Mac系统中所开启的进程 线程 什么是线程 一

【Swift】iOS开发小坑历险记(二)

前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 1.用动画更新约束没有动画效果? 缺少 layoutIfNeeded ,事例: UIView.animateWithDuration(0.15, animations: { () -> Void in self.heightConst