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

Ask Apple 2022 与 SwiftUI 有关的问答(上)

是否有任何建议用来检测列表中的行选择,类似于 “NavigationLink”,但不导航到另一个视图(例如,显示 Sheet 或从列表中选择一个选项 )?...这也是 Redux-like 框架的优势之一( 将状态从视图中抽离出来,方便测试 )。...是否关于如何使用多个场景的指导或例子?或者大多数应用程序只需要一个 WindowGroup ?A:多场景对于建立复杂的应用程序是很有用的,特别是在 macOS 上。...场景的内容视图定义了场景创建的窗口中的视图内容,但场景本身定义了应用程序的整体结构。SwiftUI 4.0 中,WindowGroup 获得了相当大的更新,真正具备了开发 macOS 应用的能力。...DocumentGroupQ:在 macOS 上使用 SwiftUI 应用生命周期和 DocumentGroup 时,如果应用仅为数据阅读器,是否可以禁止创建新文件?

12.3K20

Ask Apple 2022 与 SwiftUI 有关的问答(下)

与 macOS 上的 List 相比,许多控件在 Form 中的外观和行为都有所不同。与 Form 不同的是,List 内置了对编辑模式( Edit Mode )的支持。...Table 中上下文菜单Q:如果我在 TABLE 上添加了一个上下文菜单,我如何确定哪一行导致了菜单的显示(无需选择该行)?...我不确定这是否能满足你的用例,但值得一试。在 background 修饰器中,可以通过 ignoresSafeAreaEdges 参数设置是否忽略安全区域。...Text 与 TextField 在编辑模式下的切换Q:在 editMode 的文档中建议,在非编辑模式下,可以选择将 Text 视图换成 TextField 。...但这个滚动有两大问题,1、是一个未公开的半成品,有可能会被从 SwiftUI 框架中移除;2、不支持懒加载,即使和 Lazy 视图一起使用也会一次性加载全部的视图。

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

    打造可适配多平台的 SwiftUI 应用

    由于 iPhone 只支持单窗口模式,通常我们不会太注意它的存在,但在 iPadOS 以及 macOS 这些支持多窗口的系统中,则代表着,每次创建一个新窗口(在 macOS 中,通过菜单中的新建来创建新窗口...对于“电影猎手”当前的状态配置来说,我们可以通过将创建 Store 实例的位置移动到场景内来解决上述问题(将 MovieHunterApp 中与 Store 有关的代码移动到 ContentView 中...图片图片不过,这种在每个场景中创建独立的 Store 实例的方式并非适用于所有情况。在很多情况下,开发者只想在应用中保持一个 Store 实例。我将通过另一个简单的应用来展示这种场景。...通过点击任意窗口中任意 Tab 中的 “Hit Me” 按钮来增加点击次数。点击次数显示在窗口的上方。...为了让“电影猎手”更符合 macOS 应用的规范,我们将视图移动到菜单项中,并在 mac 代码中取消了 TabView。

    3.2K80

    打造可适配多平台的 SwiftUI 应用

    由于 iPhone 只支持单窗口模式,通常我们不会太注意它的存在,但在 iPadOS 以及 macOS 这些支持多窗口的系统中,则代表着,每次创建一个新窗口(在 macOS 中,通过菜单中的新建来创建新窗口...对于“电影猎手”当前的状态配置来说,我们可以通过将创建 Store 实例的位置移动到场景内来解决上述问题(将 MovieHunterApp 中与 Store 有关的代码移动到 ContentView 中...在很多情况下,开发者只想在应用中保持一个 Store 实例。我将通过另一个简单的应用来展示这种场景。 我想很多读者此时都不会太赞同在每个场景中创建一个独立的 Store 实例这种做法。...通过点击任意窗口中任意 Tab 中的 “Hit Me” 按钮来增加点击次数。点击次数显示在窗口的上方。...为了让“电影猎手”更符合 macOS 应用的规范,我们将视图移动到菜单项中,并在 mac 代码中取消了 TabView。

    2.1K10

    SwiftUI Overlay Container 2 —— 可定制、高效、便捷的视图管理器

    仅需简单配置,SwiftUI Overlay Container 即可帮你完成从视图组织、队列处理、转场、动画、交互到显示样式配置等基础工作,让开发者可以将精力更多地投入到应用程序视图的实现本身。...历史 2020 年夏天,在为 健康笔记[2] 添加侧向滑动菜单的过程中,我发现在开发中经常会碰到需要在一个视图的上方动态添加另一视图的场景,例如(提示信息、广告、浮动按钮、新手指南等等)。...近期我重写了该组件,除了实现了以前尚未支持的功能外,更重要的是,以此检验一下自己这段时间的能力是否有所提高。 大家可以从 这里[3] 获取最新的版本。...在 SwiftUI 中,描述视图已经变得十分的容易,因此我们完全可以将上述场景中的显示逻辑提炼出来,创建出一个可以覆盖更多使用场景的库,帮助开发者组织视图的显示风格和交互逻辑。...使用者通过调用容器管理器的特定方法,让指定的容器执行显示视图、撤销视图等工作。 容器管理器的环境值 在 SwiftUI 中,视图代码通过环境值调用容器管理器。

    2.1K20

    用 Table 在 SwiftUI 下创建表格

    欢迎大家在 Discord 频道[2] 中进行更多地交流 Table 是 SwiftUI 3.0 中为 macOS 平台提供的表格控件,开发者通过它可以快捷地创建可交互的多列表格。...但相较于 SwiftUI 中的网格容器( LazyVGrid、Grid )来说,Table 本质上更接近于 List 。开发者可以将 Table 视为具备列特征的 List 。...,更习惯于将数据元素以行( Row )的形式进行展示( 在一行中显示数据的不同属性内容 ) 在 Table 中数据是懒加载的,行视图( TableColumn )的 onAppear 和 onDisappear...在 macOS 上,使用者可以通过鼠标拖动列间隔线来改变列间距。 与 List 一样,Table 内置了纵向的滚动支持。...: Bool) 仅用于 macOS,可以设置是否开启行交错背景,便于视觉区分 或许在之后的测试版中,SwiftUI 会扩展更多的样式到 iPadOS 平台 行选择 在 Table 中启用行选择与 List

    4.2K31

    UINavigationController

    *)viewController animated:(BOOL)animated; //使用pop方法可以移除控制器 //将栈顶的控制器移除 - (UIViewController *)popViewControllerAnimated...的类型 根据Segue的执行(跳转)时刻,Segue可以分为2大类型 自动型:点击某个控件后(比如按钮),自动执行Segue,自动完成界面跳转 按住Control键,直接从控件拖线到目标控制器 如果点击某个控件后...,不需要做任何判断,一定要跳转到下一个界面,建议使用“自动型Segue” 手动型:需要通过写代码手动执行Segue,才能完成界面跳转 按住Control键,从来源控制器拖线到目标控制器 手动型的Segue...如果segue的style是push 取得sourceViewController所在的UINavigationController 调用UINavigationController的push方法将...destinationViewController压入栈中,完成跳转 如果segue的style是modal 调用sourceViewController的presentViewController方法将

    1.4K60

    Xcode 11 初体验

    将 Assistant、和 Vesion Editor下的Autor 选项卡合并为一项,并从主导航中移除,向下移到每个编辑面板中,组成 Editor Option。...Editor Options 通过Editor Options可以设置当前编辑器的显示模式,包含:Editor Only, Editor and Canvas, Editor and Assistant...其中说明一下:SwiftUI 预览 系统最低要求macOS 10.15 Add Editor 提供了编辑窗口的任意切割功能 可以指定文件打开的位置。...~~~大局观 并且你可以通过 MiniMap 快速的跳转到文件的任何区域。MiniMap 支持代码标记, 断点显示,以及搜索高亮提示,非常多的便捷功能。...Delete:跟 git stash pop 作用一样,将 Stash Changes 栈顶元素应用到当前分支,Stash Changes 栈会移除这个Stash。

    3.2K10

    Flutter 3.7更新详解

    值得注意的是,macOS 的应用现在可以通过 新物理滑动特性 来体验与其有更高匹配度的滑动体验。...Flutter 并发开发指南 将 Flutter 添加到现有的 SwiftUI 应用中 为 Flutter 创建多渠道 (针对 Android 和 iOS) 废弃 Bitcode 从 Xcode 14...因此,Flutter 也移除了 bitcode 的支持。 Bitcode 在 Flutter 应用中默认是关闭的,所以这也不应该会影响太多开发者的项目。...这意味着,使用 Flutter 3.7 以及后续版本构建的桌面端应用程序将不能再在 macOS 10.11、10.12、10.13 版本中运行,Flutter 对 macOS 的最低10点要求版本提升至...至此,Flutter 构建的 iOS 和 macOS 应用都已经包含了 Metal 的支持,OpenGL 后端渲染引擎已经从 iOS 和 macOS 嵌入器层被移除,移除后,压缩后的 Flutter 引擎体积降低了大约

    3.2K00

    干货 | 关于SwiftUI,看这一篇就够了

    一、背景 苹果于2019年度WWDC全球开发者大会上,发布了基于Swift建立的声明式框架--SwiftUI,其可以用于watchOS、tvOS、macOS等苹果旗下产品的应用开发,统一了苹果平台的UI...本文主要从以下三个方面讲述SwiftUI的特性: 从代码层面理解Swift 5.1新语法的底层实现; 从数据流方面阐述SwiftUI的黑魔法; 从布局原理层面阐述SwiftUI组件化的优势; 二、...SwiftUI内部按上述所说的逻辑,判断对应视图是否需要更新UI,最终再次呈现给用户,等待交互; 以上就是SwiftUI的交互流程,其每一个节点之间的数据流转都是单向、独立的,无论应用程序的逻辑变得多么复杂...在组合视图中,闭包中会处理大量的UI组件,FunctionBuilder是通过闭包建立样式,将闭包中的UI描述传递给专门的构造器,提供了类似DSL的开发模式。...同时SwiftUI中也是支持frame设定,但也不会像UIKit中那样作用于当前元素,在内部也是形成一个虚拟的View来承载frame设定,在布局过程中进行frame计算最终显示出想要的结果。

    10.6K11

    使用 SwiftUI 为 macOS 创建类似于 App Store Connect 的选择器

    我希望构建类似于 App Store Connect 中的选择器组件,使用户体验尽可能熟悉,并在本文中,将展示如何使用 SwiftUI 为 macOS 构建了这个组件。...创建选择器组件让我们分析一下,我们有一组想要在 SwiftUI 列表中显示的构建。每个构建都包含一组属性,其中之一是 betaGroups,它是一个表示构建所属测试群组的结构体数组。...使用 .overlay 修改器在用户悬停在测试群组组件上时显示一个移除按钮。该按钮从构建所属的测试群组列表中移除测试群组。...总结文章介绍了如何使用 SwiftUI为macOS 创建类似于 App Store Connect 的选择器组件。...在 BetaGroupPicker 中,用户可以看到构建所属的测试群组,并有选择地将它们添加到或从构建中移除。

    19732

    架构之路 (五) —— VIPER架构模式(一)

    开始 首先看下主要内容: 在本教程中,您将了解如何在SwiftUI和Combine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行的iOS应用程序,来自翻译。...在本教程中,您将使用VIPER体系结构模式构建一个应用程序。这款应用也被方便地称为VIPER。 它将允许用户通过向一条路线添加路径点来构建公路旅行。...VIPER是一种类似MVC或MVVM的体系结构模式,但是它通过单一职责进一步分离了代码。苹果风格的MVC促使开发者将所有的逻辑放到一个UIViewController子类中。...router处理从一个屏幕到另一个屏幕的转换,设置下一个视图所需的类。 在命令式UI范例中——换句话说,在UIKit中——路由router将负责显示视图控制器或激活segue。...SwiftUI将所有目标视图声明为当前视图的一部分,并根据视图状态显示它们。

    17.6K10

    肘子的 Swift 周报 | Swift,超越苹果生态!

    在这个新版本中,首次在非苹果平台复刻了 SwiftUI 框架的核心基础——AttributeGraph,从而具备了完整地将 SwiftUI 的优势全面带到其他平台的可能性。...Aryaman Sharda 在本文中深入探讨了 ABI 稳定性与库进化模式,并通过实例详细说明了 @frozen 关键字在枚举和结构体中的应用。...这给了我许多全新的灵感。这样的方法和思维模式预计将很快被更广泛的开发者采纳,为用户带来更便捷的体验。...文章中,作者强调他的目的并非是要比较 SwiftUI 与 AppKit 的性能优劣,或者质疑 SwiftUI 在 macOS 上的应用适用性。...实际上,该应用的复杂模板编辑器几乎完全使用 SwiftUI 开发,且表现出色。这一点彰显了 SwiftUI 在实际应用中的强大潜力和灵活性。

    15810

    Xcode 11 初体验(Xcode工作流的改进(Workflows))

    (本人是非常喜欢代码块的,对于这个调整我要点赞) [1240] 将 Version Editor 中的 log 选项卡移到了检查器中,组成了新的Source Control History区。...将 Assistant、和 Vesion Editor下的 Autor 选项卡合并为一项,并从主导航中移除,向下移到每个编辑面板中,组成 Editor Option。...Editor Options 通过Editor Options可以设置当前编辑器的显示模式,包含:Editor Only, Editor and Canvas, Editor and Assistant...其中说明一下:SwiftUI 预览 系统最低要求macOS 10.15 [1240] Add Editor 提供了编辑窗口的任意切割功能: 可以指定文件打开的位置。...~~~大局观 并且你可以通过 MiniMap 快速的跳转到文件的任何区域。MiniMap 支持代码标记, 断点显示,以及搜索高亮提示,非常多的便捷功能。

    2.6K40

    如何判断 ScrollView、List 是否正在滚动中

    比如在 SwipeCell[3] 中,需要在可滚动组件开始滚动时,自动关闭已经打开的侧滑菜单。遗憾的是,SwiftUI 并没有提供这方面的 API 。...本文将介绍几种在 SwiftUI 中获取当前滚动状态的方法,每种方法都有各自的优势和局限性。...在应用程序启动的时候,主线程的 Runloop 会被自动创建并启动。Runloop 拥有多种模式( Mode ),它只会运行在一个模式之下。...iOS 系统在 macOS 下的 eventTracking 模式中,该方案的表现并不理想屏幕中只能有一个可滚动控件由于任意可滚动控件滚动时,都会导致主线程的 Runloop 切换至 tracing...模式,因此无法有效地区分滚动是由那个控件造成的方法三:PreferenceKey在 SwiftUI 中,子视图可以通过 preference 视图修饰器向其祖先视图传递信息( PreferenceKey

    3.8K40

    推荐一款开源的MacOS屏幕录制工具QuickRecorder,小巧轻量且功能齐全!

    从它的界面工具栏上看,和Omi特别的像,也不排除是作者参照了它的UI而自主开发的。 该工具使用 SwiftUI 编写,并借助ChatGPT辅助开发而成的。...• 多样录制模式:无论用户偏好窗口录制还是应用程序录制,QuickRecorder 都满足不同录制需求,为捕捉屏幕活动提供灵活性和便利性。...• 直观用户界面:启动时,QuickRecorder 为用户呈现友好的主界面,简化了录制过程。此外,用户可以通过单击 Dock 图标轻松访问工具,确保快速和便捷的使用。...• 实时录制指示器:在录制会话期间,QuickRecorder 在菜单栏显示录制指示器,让用户可以轻松监控录制进度、暂停录制或随时跟踪录制时长。...凭借其性能、多功能性和用户友好的设计,QuickRecorder 有望成为 macOS 生态系统中捕捉屏幕活动的首选工具,轻松高效地实现。

    4K10

    SwiftUI: 从 React 开发人员的角度看 SwiftUI

    最近我通过学习 SwiftUI 时,令我印象最深的就是我对它的熟悉程度,因为我已经在 React 和 TypeScript上工作了几年了。...确实,有使用 React 库/框架和类型的经验可以极大地加快我的学习速度。我的第一个SwiftUI代码对我过去在 React 中构建的东西感到非常陌生,而且我可以看到设计模式有很多重叠之处。...现在,我开始自己开发应用程序,我想分享一些常见的设计模式以及 SwiftUI 和 React 之间的微小差异,通过这些差异 我一直遇到这些差异,通过总结这些差异帮助我更好的开发自己的应用,同时这会激发其他...需要满足的要求如下: 结构必须具有某些View类型的body属性。 该 body 属性可以包含从单个原始视图(SwiftUI框架默认提供的视图)到复杂的嵌套视图的任何内容。...在下面,您将找到两个代码段,第一个包含有效的SwiftUI视图,第二个显示无效的SwiftUI视图的示例: 使用 VStack 和 Text 原语视图的有效 SwiftUI 视图 struct ContentView

    2.1K40

    ViewBuilder 研究(下) —— 从模仿中学习

    本篇我们将通过对 ViewBuilder 的仿制,探索更多有关 SwiftUI 视图背后的秘密。...SwiftUI 如何处理视图 SwiftUI 从加载视图、响应状态到屏幕绘制大概经历如下过程: 从根视图开始按视图层级结构沿特定分支(依据初始状态)逐个实例化视图,直到满足当前全部的显示所需 上述实例化后的视图值...,按视图层级结构依当前状态逐个实例化视图类型(到满足全部显示所需为止) 将已不再需要参与布局和渲染的视图的值从 SwiftUI 数据池中移除,并在数据池中添加上新增的视图值 对于仍需显示但视图值发生变化的视图...: AttributedString) -> AttributedString { component } 但 SwiftUI 需要通过视图的类型和位置对视图进行标识,因此在处理选择分支时,无论该分支是否被显示...(无论是否执行该分支),而在低版本的系统中并没有 MyText 的定义。

    3.1K20

    在 iPhone 上使用 Popover Segue

    我们平常用的最多的是 Show ,就是从右向左滑入新页面,这也是最符合用户习惯的转场方式。 Popover 一般是用在 iPad 上,在 iPhone 上不能直接使用。...LandStatusMenu.png 然后将 Use Preferred Explicit Size 选项打勾,并在下方填上你所需要的弹出菜单的尺寸: ?...DebugSize.png 这个时候我们刚刚拖到 Storyboard 上的那个 UITableViewController 就会显示 150 * 200 的大小了,你可以用 Simulated Size...接下来就是拉一个 Segue 了,我这边是从 HomeViewController 上的“地块”按钮拉到 LandStatusViewController,Segue 的类型选择 Present as...PopoverSegueMenu.png 最后就是稍微写几行代码了,在 HomeViewController 中: override func prepareForSegue(segue: UIStoryboardSegue

    1K50
    领券