首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

它的复现条件非常简单:在真机上测试( 模拟器不容易复现 )点击 “GO” 按钮进入下一层视图点击 “Show Sheet” 按钮弹出 Sheet通过下滑手势取消 Sheet在 Sheet 取消后(动画结束时...),立即在屏幕由左至右滑动,返回一层视图在滑动返回到上一层视图后,应用会锁死。...再次执行上述过程,您会发现在返回上层视图后,应用并不会锁死,一切都恢复了正常。然而,明显地,强迫用户点击 “Dismiss” 按钮并不是一个好的选择,特别是在没有屏蔽手势取消 Sheet 的情况下。...通过下面的代码,我们可以让用户使用下滑手势来取消 Sheet,同时又不会导致应用锁死。...它的复现条件如下:iOS 16 系统,在真机或模拟器测试点击视图列表中的按钮,可以进入下一级视图。

692110

解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

它的复现条件非常简单: 在真机上测试( 模拟器不容易复现 ) 点击 “GO” 按钮进入下一层视图 点击 “Show Sheet” 按钮弹出 Sheet 通过下滑手势取消 Sheet 在 Sheet 取消后...(动画结束时),立即在屏幕由左至右滑动,返回一层视图 在滑动返回到上一层视图后,应用会锁死。...通过下面的代码,我们可以让用户使用下滑手势来取消 Sheet,同时又不会导致应用锁死。...它的复现条件如下: iOS 16 系统,在真机或模拟器测试 点击视图列表中的按钮,可以进入下一级视图。...因此,当我们首先更新状态,然后 SwiftUI 再响应该状态的变化(返回上层视图),即使此时对 AG 进行清理,仍将可以保证 AttributeGraph 的完整性,应用自然不会出现问题。

32520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【visionOS】从零开始创建第一个visionOS程序

    在任何SwiftUI应用中,你都可以使用场景将内容放到屏幕。场景包含要在屏幕显示的视图和控件。场景还定义了这些视图和控件出现在屏幕时的外观。...在模拟器中运行你的应用程序,以验证你的内容看起来像你期望的那样,并在设备运行它,以看到你的3D内容栩栩如生。 围绕一个或多个场景组织内容,这些场景管理应用程序的界面。...人们可以使用连接的鼠标、触控板或键盘与项目交互、触发菜单命令和执行手势。 构建并运行你的app页面链接 在模拟器中构建并运行你的应用,看看它看起来如何。...当指定的手势发生在实体时,SwiftUI执行提供的闭包。 下面的示例将一个点击手势识别器添加到上一个示例中的球体视图中。...如果省略这些组件,视图就不会检测到与实体的交互。

    89540

    如何在Xcode下预览含有Core Data元素的SwiftUI视图

    如果说标准的模拟器可以涵盖真实设备的90%的功能,那么用于预览的模拟器可能只能提供50%的设备拟真度。 用于预览的模拟器同样使用沙盒机制,具有同标准设备(或模拟器)一致的目录结构。...用于修复标准模拟器故障的经验同样适用于排查预览故障 在使用标准模拟器进行程序调试时,我们会碰到由于模拟器的原因产生的各种奇异状况。...通常在这种情况下,我们可能会采用如下的方式来尝试解决: •删除模拟器的应用程序重新安装运行•清除编译缓存(Clean Build Folder)•删除项目对应的派生数据(Derived Data)•重置模拟器...•在模拟器设备管理器中删除模拟器再重新添加 上述的手段,多数也都适用于修复某些情况下的预览崩溃。...在某些情况下,即使感觉预览是正常(实际数据没有刷新),通过切换到动态模式也会强制Core Data数据刷新。

    5.1K10

    是时候为各式设备适配完善的输入支持了

    那么在诸如手机、可折叠设备、平板电脑、Chromebook、支持外接显示屏的 Chromebox、带内置显示器的 Chromebase、Android TV 等各种 Android 设备类型中,开发者应该如何确保不同的输入方式适用于自己的应用...我们非常兴奋,在支持触控的 PC ,Android 模拟器现在也可以支持多点触控,这让您可以测试需要使用多个手指的手势与应用进行交互,比如双指张合、缩放和其他触摸交互。...△ 在 Google 地图中使用手势操作 这款内置 Android Studio 的可折叠模拟器正在运行 Google 地图,只需使用两个手指就可以放大和缩小地图。...而且这些模拟器更新的不仅是只支持使用两个手指,如果您的硬件允许,可以支持多达 10 个触摸点。 您看到的所有这些变化都不是 Surface Duo 模拟器所特有的,它们也适用于其他可折叠模拟器。...Microsoft 也一直在利用这些模拟器更新来开发和优化自己的应用,例如在包括 Surface Duo、大屏幕和其他可折叠设备等多种设备类型测试触控笔的交互。

    1.1K20

    写给开发者的 Vision Pro 评测:易上手,但 UI 设计不够“革命”

    在 VisionOS 之上,SwiftUI 也实现了一系列升级,包括“全新的 3D 功能,以及对纵深、手势、效果和沉浸式场景类型的支持”。...隐私利弊 苹果宣称,Vision Pro 和 VisionOS 平台将把保障用户隐私视为核心原则,同时“允许开发者轻松通过 API 使用设备的众多功能”。...例如,系统知晓用户在 3D 空间中眼睛和手部的位置,并将手势作为触控事件进行传递。此外,系统会在检测到注视时在视图上呈现悬停效果,但不会直接与用户所查看的当前应用进行通信。”...Xcode 是苹果的集成开发环境(IDE),带有 Vision Pro 模拟器和增强的“Instruments”性能分析工具(其中包括新的 RealityKit Trace 模板)。...吸引更多开发者投身 3D 新世界 与往常一样,每当苹果公布一款新设备,都会在开发工具和技术投入大量心力。对现有 iOS 开发者来说,VisionOS 这边也确实没有太多难以掌握的元素。

    33720

    扒虫篇-Bug日志 Ⅱ

    一个自定义弹框,点击页面上任何地方都会触发消失手势 ~ 一个自定义弹框中有一个灰色的背景,点击可以让整个弹框都消失,点击中心的白色编辑区域,不应该消失,可是现在,点击中心的白色编辑区域也会触发加在灰色背景的消失手势...解决方法: 原因是因为,白色的区域 addSubView 在了 灰色背景视图上,手势加在灰色视图上,因为白色的父视图是灰色的视图,所以点击白色的区域也会触发其父视图的手势,,,,,只需要把白色视图不加在...灰色区域即可,这样,点击白色区域就不会触发灰色背景的消失手势了。...,因为我们一般想支持的sdk越低越好,尽量支持低版本的ios设备。...这是因为模拟器不会校对文件格式的正确性,而真机会,那些不显示的图片其实不是真正的 PNG格式 . 9.APP上传APPStore 报错 -22421 ? Snip20161228_1.png .

    57910

    【移动开发】InfoQ 2022 年移动和物联网趋势报告

    通过从 ML-in-the-Cloud 模型转变为 Edge-ML 甚至设备 ML,物联网设备变得越来越“智能”,这可能在减少延迟和数据隐私方面提供巨大的好处。...属于移动和物联网领域的所有设备都有一个重要的硬件组件,使它们成为可能或有用。然而,我们的报告不会过分关注硬件方面,而是考虑软件开发角度的影响,以符合 InfoQ 的使命。...设备端机器学习、Edge-ML 首先,我们想在这里提到设备或边缘机器学习,您实际是直接在移动设备或边缘运行预训练的 ML 模型,而不是在云运行它。...另一个重要的优势是用户数据永远不会离开设备,这也可能是许多或用例中的关键问题,例如健康应用程序。 增强现实和虚拟现实 增强现实和虚拟现实的应用也在增长。...基于手势和姿势的 UI AR 和 VR 都为与应用程序和环境交互提供了新的可能性,这导致了人机交互的新方法,特别是使用手势识别或 2D 姿势检测的可能性。

    1.1K10

    SwiftUI-数据流

    数据处理的基本原则 Data Access as a Dependency:在 SwiftUI 中数据一旦被使用就会成为视图的依赖,也就是说当数据发生变化了,视图展示也会跟随变化,不会像 MVC 模式下那样要不停的同步数据和视图之间的状态变化...不过值类型在传递时会发生复制操作,所以给传递后的值类型即使属性更新了也不会触发最初的传过来的值类型的重新赋值,所以界面并不会刷新,此时需要用@Binding,因为它可以将值类型转为引用类型,这样在传递时...ObservableObject 适用于多个 UI 之间的同步数据。...使用@EnvironmentObject,SwiftUI 将立即在环境中搜索正确类型的对象。如果找不到这样的对象,则应用程序将立即崩溃。...数据流图 从上图可以看出SwiftUI 的数据流转过程: 用户对界面进行操作,产生一个操作行为 action 该行为触发数据状态的改变 数据状态的变化会触发视图重绘 SwiftUI 内部按需更新视图,

    10.1K20

    AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架的视频流App的构建

    注意:视频可能无法在模拟器中播放。 在真实设备运行该应用程序将缓解该问题。 入门项目是一个 vlogger 应用程序,您将使用 AVKit 和 AVFoundation 添加功能和特性。...3) VideoPlayer 是一个方便的 SwiftUI 视图,需要播放器对象才能发挥作用。 您可以使用它来播放视频。 4) 默认情况下,SwiftUI 视图考虑设备的安全区域。...---- Bonus: Adding Picture-in-Picture 如果您可以在设备做其他事情的同时继续观看视频会怎样? 您将向应用程序添加画中画(PiP)功能。...您会在左上角看到画中画按钮……否则不会! 缺点是,在撰写本文时,iOS 14.5是可用的最新版本,VideoPlayer 的 SwiftUI 视图未显示画中画按钮。...注意:画中画可能不适用于模拟器。 尝试在设备运行。

    6.9K10

    大屏时代的生态变迁,看平板手机的拇指热键与界面布局

    不过毕竟单一按钮的尺寸较小,不会像在系统导航栏堆叠一层工具栏那样带来很大的影响。在Android的UI体系当中,这种悬浮按钮称为“FAB”(Floating Action Button)。...我们在小屏设备遇到的诸如CSS兼容性局限或页面元素与浏览器自身布局冲突等一系列问题,在平板手机中依然存在。...我总会在用户研究中观察到这样的现象:对移动设备的网页,除非用户在主要内容区域实在无法找到自己需要的信息,否则他们几乎不会想起主导航。...不要随着屏幕的增大而放大手势操作的触发区域。以横滑展开菜单为例,在平板手机上,不要放大横滑所需的距离,别让用户必须在整个屏幕范围内使用手势才能达到触发效果。...你也可以为这种模式添加横滑展开的手势,只要不与界面整体的横滑回退效果产生冲突即可。总体讲,功能控件位于屏幕左右边缘的模式更适用于双手拇指同时操作的情况,因此在平板电脑的界面中更为常见。

    2.4K10

    大白技术控 | Windows10X 模拟器简单上手体验

    现在要变了,通过信息密度的下降带来用户体验的上升,你不会在这里看到什么文件夹或者文件,有的只是放大几倍的应用(还有PWA),以后开发应用时需要开发者对应用图标多上上心了。...被挤在后面的应用将通过 Task View,也就是任务视图按钮查看,这套操作还是很有点和移动设备取经的味道的,只是目前系统并不完善,只是个模拟器我也不会要求太高,希望以后能有更多的手势操作吧。...尽管右边也是个 Dock 栏,但是右下角显示时间的地方可以触发 Action Center。 这里我们以往都叫通知中心,但事实,通知只是其中一个模块。这一点在Windows10X更为明显。...WDNMD,真就是开个模拟器跑 Win32 应用呗? 而且这个笔记本应用在进行窗口拖拽的操作时极为卡顿,我承认我电脑配置不高,但这种卡顿是很明显的,在我这样的低配电脑更是放大了数倍。...然而这只是个模拟器,我倒不会太较真,只希望正式版出来之后能好一些吧。

    1.6K20

    jimojianghu

    立马联系用户,才发现原来是用户使用笔记本电脑,没有禁用触控板,然后不小心碰到导致整个界面都放大,很多功能超出界面不见了。...在以前,如果要禁止移动端设备的触摸屏,手指缩小放大的功能,都会想到使用viewport 来处理。... 注意: 使用 touch-action: none 作用于html元素,可以禁止页面缩放,因为该样式属性是非继承属性,不会影响页面子元素的手势操作...none 当触控事件发生在元素时,不进行任何操作。 pan-x 启用单指水平平移手势。可以与 pan-y 、pan-up、pan-down 和/或 pinch-zoom 组合使用。...添加 passive 参数为true后,touchmove 事件不会阻塞页面的滚动(同样适用于鼠标的滚轮事件)。

    3.8K00

    Jetpack Compose Beta 版现已发布!

    Beta 版也意味着其 API 已相对稳定,因此我们不会更改或移除 API。...Beta 版已得到最新的 Android Studio Arctic Fox Canary 版支持,后者提供了很多 新工具: Live Literals (实时文字): 在预览 (Preview) 及设备模拟器实时更新文字...Android Emulator 的 Live Literals (实时文字) 适用于 Jetpack Compose 的布局检查器 兼容现有应用 Jetpack Compose 旨在与 Android...Accompanist 还提供了适用于常见 图像加载库 的封装容器。...例如,借助 协程,我们可以编写更简单的异步 API,如描述手势、动画或滚动。这样,我们就能更轻松地编写代码,将异步事件 (如触发动画的手势) 与结构化并发提供的取消和清理相结合。

    5.6K10

    SwiftUI 中用 Text 实现图文混排

    .font(.title)image-20220814160547051有关 baseline 对齐线方面的内容,请阅读 SwiftUI 布局 —— 对齐[6] 一文再次强调,我们只能使用不会改变 Text...动态类型( Dynamic Type )功能允许使用者在设备端设置屏幕显示的文本内容的大小。它可以帮助那些需要较大文本以提高可读性的用户,还能满足那些可以阅读较小文字的人,让更多信息出现在屏幕。...限于篇幅,下文中将不会对范例代码做详尽的讲解,建议你结合本文附带的 范例代码[10] 一并阅读接下来的内容。...从 Xcode 运行范例代码,动态创建的图片可能并不会立即显示出来( 这是 Xcode 的问题 )。直接从模拟器或实机上再次运行将不会出现上述延迟现象。...,通过 SwiftUI 视图创建标签根据标签视图的尺寸创建空白占位图片在 Text 中添加占位图片,进行混排使用 overlay 将标签视图定位在 leadingTop 位置,覆盖于占位图片TitleWithOverlay

    4.4K30

    WKWebView详解

    allowingReadAccessToURL:(NSURL *)readAccessURL; URL是文件的URL readAccessURL是允许读取的URL,如果是文件夹,则文见夹下所有文件都可以被读取 --- 放缩网页内容 是否允许放大手势放大网页内容...@property(nonatomic) BOOL allowsMagnification; 默认值是NO 这里只是限制手势而已,通过magnification属性仍然可以调节网页的放大比例 影响网页内容放缩的因子...即以指定的点为中心放大 --- 浏览 是否允许水平滑动手势触发网页的前进和后退 @property(nonatomic) BOOL allowsBackForwardNavigationGestures...; 在iOS,这个属性只在支持3D Touch的设备支持 在iOS 10及以后的系统版本默认值是YES,之前的默认值是NO 如果将该属性的值设置为YES,则iOS用户可以按下链接来预览链接,并可以检测到地址和电话号码等数据...WKBackForwardList对象仅仅维护的是列表数据,并不会执行任何实际的网页加载的操作,不会产生任何客户请求。如果你需要产生一次页面加载,请使用loadRequest: 这些方法。

    20.6K193

    探讨 SwiftUI 中的几个关键属性包装器

    实际,它只是对已存在数据的引用。只有能够引发视图更新的值被 get 方法读取时,才会触发视图更新( 比如 @State、@StateObject ),这点对于自定义 Binding 尤为重要。...标注的对象实例在视图的整个生命周期中保持唯一,即使视图更新,对象实例也不会重新创建。...引入 @StateObject 意味着所有相关操作都在主线程上进行( SwiftUI 会隐式为视图添加 @MainActor),包括异步操作。应将需要在非主线程运行的代码应该从视图代码中剥离。...适用于构建复杂的视图层级,其中多个视图需要访问同一个 ObservableObject 实例。...典型应用场景 当需要访问和响应如界面样式(暗模式/亮模式)、设备方向、字体大小等由系统或上层视图提供的环境值时( 通常对应值类型)。

    28810
    领券