2026/4/2 15:07:48
网站建设
项目流程
网站开发要什么流程,网站建设必备条件,中国建设银行官网站下载,哪家网站设计公司好又是一个小问题可能带来的大改动#xff0c;感觉官方在评估的时候#xff0c;有点过分细节了。
这个问题来自去年底的 #179482 issue #xff0c;Flutter 在 iOS 26 上#xff0c;某些场景会因为出现半透明键盘#xff0c;而页面底下本来应该被键盘遮挡的 Widget#xf…又是一个小问题可能带来的大改动感觉官方在评估的时候有点过分细节了。这个问题来自去年底的 #179482 issue Flutter 在 iOS 26 上某些场景会因为出现半透明键盘而页面底下本来应该被键盘遮挡的 Widget由于默认没有被绘制从而出现键盘背景颜色 UI 异常虽然问题看起来是一个圆角问题但是实际上这是iOS 26 系统键盘增加了“半透明”后带来的问题Flutter 在键盘后面那一层在某些场景下没有正确渲染内容导致键盘半透明区域透出来的不是底下 BottomSheet 的真实内容而是一整块黑色区域。issue 提到问题问题最明显的场景主要出现在 iOS 26 的showModalBottomSheet()下。为什么会这样首先就是你的 App 目前是否使用了最新 Xcode 26 以及在Info.plist里有没有使用UIDesignRequiresCompatibility YES让 App继续使用旧的系统设计风格通过上面前两张图我们可以看到iOS 26 正常情况下系统键盘其实是会出现半透明效果并且具备圆角虽然透明效果不是特别明显但是对比后两张图里可以看到微信和淘宝还是保留着原本的 iOS 18 的直角效果。如果还是保留原本风格其实并不会遇到这个问题。所以这个 issue 首先是需要在 Xcode 26 下并且没有关闭 Liquid Glass 适配的情况下才会遇到当然就算是 iOS 26 场景一般情况下也不会有什么大问题比如下图直接在界面内使用一个TextField其实并不会有明显问题问题还是主要出现在类似showModalBottomSheet的场景特别是在背景色透明的时候虽然我们设置了backgroundColor: Colors.transparent**但是在 Flutter 里某些时候 UI 并不会“在键盘背后继续画” ** 因为在 iOS 26 之前Flutter以及很多跨平台框架都默认系统键盘 完全不透明的遮挡物所以 Flutter 的 pipeline 会认为键盘区域背后不需要特殊关注。实际上类似同样的问题在 RN 里也是存在甚至对于 CMP 来说也是存在不一样的问题所以对于 CMP 来说才会有 1.10 Interop views 新特性 Overlay 用于支持 UIKit 的半透明/blur 可以采样到 Skia 的内容的实验性 API 所以这个问题实际上的本质不是圆角比如我把showModalBottomSheet背景改成红色此时你可以看到键盘是可以采集到背景色的甚至我把Container也改成红色你也看不出来异常所以问题更多出现在透明色上随着showModalBottomSheet弹出并带有透明色的时候由于 Flutter 认为被键盘这挡住的下层 Widget 并不需要绘制所以导致系统键盘采集不到对应的像素点从而出现了一开始的黑色背景。所以其实这个 Bug 如果想临时解决只需要在Info.plist里配置UIDesignRequiresCompatibility YES就可以了只是此时 App UI 会是 iOS 18 的风格如果再对比抖音和 Github App 就可以看到 iOS 26 新键盘风格对于整体应用的风格影响还是挺大的所以不少 App 目前会选择通过关闭适配拖延时间。那为什么会说这个 Bug 会导致整个底层生态的重构因为 iOS 26 改变了“系统键盘会完全遮挡 App 内容”这一长期不变的底层假设而 Flutter 的渲染 / 布局 / Insets / 事件系统几乎全都建立在旧假设之上这套逻辑几乎渗透在RenderObject的layoutScaffold/BottomSheet/NavigatorMediaQueryTextInputPluginEngine 中的 view hierarchy···也就是如果想完全适配这个新场景多层嵌套下还提供键盘场景的透明支持一旦需要完全支持“键盘下内容需要绘制”就要系统性重构多个核心层例如Framework 层DartMediaQuery.viewInsets现在代表“不可见区域”未来要不要拆成多个coveredInsets、obscuredInsets、visualInsetsScaffold / BottomSheet是否仍然自动 resize还是只做布局、不做裁剪Clip 行为现在大量 widget 默认不 clipEngine 层iOS embedderFlutterView / UIView hierarchyCALayer 合成顺序系统 keyboard window vs Flutter window是否需要在被遮挡区域继续 raster或改变 backing store 策略输入系统 Hit Test键盘下的 widget画出来了但不能响应触摸Flutter 目前的 hit-test 假设“看得见 可点”插件 三方生态各种bottom sheet 插件keyboard avoiding 插件聊天 UI各种涉及“手搓” viewInsets 的场景所以这个“语义场景”如果发生比变化那么涉及的将是大量底层改动甚至一些性能指标都会需要调整从长远来看这还会是一个 iOS 平台特有的差异化适配场景并且引入大量 bread change。最后最后总结下正常大家使用输入框输入文本内容不会有什么问题甚至如果你用 Dialog 场景也不会有什么问题甚至你看下方最后一张图片在 dialog 下的键盘依然可以正常透视工作所以问题主要还是存在于BottomSheet这种场景因为BottomSheet默认行为是认为底部对齐高度有限所以对于BottomSheet会认为底部高度区域在键盘下不渲染所以导致最后采集不到像素出现黑色。针对问题其实可以选择配置UIDesignRequiresCompatibility YES来解决或者替换为 Dialog 来绕过场景但是如果要等官方修复这个场景可能会需要等待评估是否真的有必要大规模底层改动。从我的角度看这完全没必要毕竟真这么修改带来的就是生态的大量 break change。参考链接https://github.com/flutter/flutter/issues/179482