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

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

Ask Apple 为开发者与苹果工程师创造了在 WWDC 之外进行直接交流机会。本文对本次活动中与 SwiftUI 有关一些问答进行了整理,并添加了一点个人见解。本文为上篇。...对 iOS 和 iPadOS 来说,一个按钮或许有效,但对 macOS 就不太适合了。另外,.contextAction 支持多选。它还会回来吗?...对于苹果工程师给予建议有一点请注意,那就是如果有在视图中修改该环境对象实例需求,须确保视图不会被反复重构( SwiftUI 重新创建视图类型实例 )。...惰性容器中视图,会根据其是否出现在可视区域而反复调用 onAppear 和 onDisapper。但 onAppear 和 onDisappear 并非为视图存续期起点和终点。...在常规宽度下,我们在详细视图中有一个带有导航堆栈侧边栏。在紧凑宽度下,我们有一个标签栏,每个标签都有一个导航堆栈。

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

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

Ask Apple 为开发者与苹果工程师创造了在 WWDC 之外进行直接交流机会。本文对本次活动中与 SwiftUI 有关一些问答进行了整理,并添加了一点个人见解。本文为下篇。...Jane 自动根据宽度排版[10] 视频与该问题十分契合。阅读 The SwiftUI Layout Protocol [11]了解如何创建自定义布局。...创建从底部开始滚动视图Q:我如何实现一个在底部对齐滚动视图,在 macOS 上会不会有糟糕性能?...将背景扩展到安全区域Q:如果我有一个自定义容器类型,可以接受一个顶部和底部视图,是否有办法让 API 调用者将所提供视图背景扩展到安全区域内,同时将内容( 如文本或按钮 )保留在安全区域内?...然后让顶部/底部视图忽略安全区域。我不确定这是否能满足你用例,但值得一试。在 background 修饰器中,可以通过 ignoresSafeAreaEdges 参数设置是否忽略安全区域

14.7K30

SwiftUI 布局 —— 尺寸( 上 )

),我们简述一下 SwiftUI 布局过程( 当前设备为 iPhone 13 Pro ): SwiftUI 布局系统为 ZStack 提供一个建议尺寸( 390 x 763 该尺寸为设备屏幕尺寸去掉安全区域大小...第二阶段 —— 安置子民 在该阶段,视图将根据 SwiftUI 布局系统提供屏幕区域( 由第一阶段计算得出 )为子视图设置渲染位置和尺寸( 上方 5-6 )。...因此,为了简化文字,我们在文章中会将视图与具备布局能力容器等同起来。 不过需要注意是,在 SwiftUI 中,有一类视图是会在视图树上显示为视图,但并不具备布局能力。...( 文本不折行、不省略 ) 85.33 x 20.33( 上文例子中尺寸 ) 明确尺寸模式 如果建议宽度大于单行显示需要,则需求宽度返回单行实现显示尺寸宽度 85.33 ;如果建议宽度小于单行显示需要则需求宽度返回建议尺寸宽度...渲染尺寸 在布局第二阶段,当 SwiftUI 布局系统调用布局容器( 符合 Layout 协议 ) placeSubviews 方法时,布局容器会将每个子视图放置在给定屏幕区域( 尺寸通常与该布局容器需求尺寸一致

4.6K20

解析SwiftUI布局细节(二)循环轮播+复杂布局

GeometryReader 主要作用就是能够获取到View建议尺寸,这就是它主要作用,要没有它我们面临可能就是无休止传值了,SwiftUI 既然是声明式UI,按我理解你就没有办法去获取某一个视图视图之类...** subscript 可以让我们获取.leading,.top等等类似这样数据 *** safeAreaInsets 可以获取安全区域Insets **** frame(...3、再提一点关于上面说滚动视图,在UIKit中我们可以用UICollectionView搞定一切,但是在SwiftUI中没有这个控件,我建议采用方式是 ScrollView + HStack + VStack...Gesture 这个我们可以说说,它就是我们具体手势类,像我们单击手势和我们这里用到拖拽手势一样。...= 单个视图宽度 + 视图间距 let currentOffset = CGFloat(currentIndex) * (homeViewModel.homeBannerWidth

11.7K20

SwiftUI 中实现视图居中若干种方法

欢迎大家在 Discord 频道[2] 中进行更多地交流将某个视图视图中居中显示是一个常见需求,即使对于 SwiftUI 初学者来说这也并非难事。...即使文本宽度超出了 HStack 给出建议宽度,但 HStack 在布局时,仍会保留其最小厚度,导致下图上方文本无法充分利用矩形视图宽度。解决方法为:Spacer(minLength: 0)。...background 添加符合 ShapeStyle 协议元素时,可以通过 ignoresSafeAreaEdges 参数设置是否忽略安全区域,默认值为 .all ( 忽略任何安全区域 )。...因此,当我们将合成后 hello world 视图放置在 VStack 顶部时( 通过 Spacer ),矩形 background 会连同顶部安全区域一并渲染。...那么 HStack、VStack 会在明确了所有固定尺寸子视图需求尺寸后,将所剩可用尺寸( HStack、VStack 视图给他们建议尺寸 - 固定尺寸子视图需求尺寸 )平均分配( 在优先级相同情况下

6.6K40

SwiftUI 4.0 全新导航系统

SwiftUI 4.0( iOS 16+ 、macOS 13+ )对导航系统作出了重大改变,提供了以视图堆栈为管理对象新 API ,让开发者可以轻松实现编程式导航。本文将对新导航系统作以介绍。...,一分为二方式将让布局表达更加清晰,同时也会强迫开发者为 SwiftUI 应用对 iPadOS 和 macOS 做更多适配。...上述选项并非适用于所有的平台,例如,在 macOS 上,detalOnly 不会起作用 如果想在 SwiftUI 4.0 之前版本上使用类似的功能,可以参考我在 用 NavigationViewKit...设置栏宽度 NavigationSplitView 为栏中视图提供了一个新修饰符 navigationSplitViewColumnWidth ,通过它开发者可以修改栏默认宽度: struct NavigationSplitViewDemo...browser 在 iPad 下,当前视图 Title 将显示在左侧 image-20220612190914949 editor 不显示返回按钮旁边上页视图 Title image-20220612191040190

10.2K62

打造可适配多平台 SwiftUI 应用

本文是笔者参加 2023 年 4 月 20 日 “SwiftUI 技术沙龙( 北京站 )” 活动分享内容。基于记忆整理而成。...有关本次活动情况,可以参阅 我在北京参加 SwiftUI 技术沙龙 一文。本次活动采用是线下交流并辅以 live coding 形式,因此内容侧重点以及组织形式与以往博客文章会有明显不同。...100% 基于 SwiftUI 开发,目前支持三个平台: iPhone、iPad 和 macOS。使用者可以通过它来浏览电影信息,包括正在上映以及即将上映影片。...通过点击任意窗口中任意 Tab 中 “Hit Me” 按钮来增加点击次数。点击次数显示在窗口上方。...因此,在 macOS 中,我们需要单独为 Settings 视图来调整颜色和语言环境值。

3K80

自定义 Button 外观和交互行为

相较于 UIKit ,SwiftUI 通过 Button 视图,让开发者以少量代码便可完成按钮创建工作。...label:目标按钮的当前视图,通常对应着 Button 视图 label 参数内容role:iOS 15 后新增参数,用于标识按钮角色( 取消或具备破坏性)isPressed:当前按钮按压状态...而 TapGesture 在不松开手指情况下,如果移动到可点击区域外,SwiftUI 将不会调用 onEnded 闭包中操作。...ButtonStyle 和 PrimitiveButtonStyle 是专门针对按钮样式 API ,它们不仅可以应用于 Button 视图,也可以应用于很多 SwiftUI 预置系统按钮功能之上,例如...默认情况下,即使单元格视图中包含了多个按钮SwiftUI 也只会将 List 单元格视作一个按钮( 点击后同时调用所有按钮操作 )。

3.6K60

GeometryReader :好东西还是坏东西?

( Required Size )返回给视图视图建议尺寸作为自身建议尺寸传递给子视图 将子视图原点(0,0)置于 GeometryReader 原点位置 其理想尺寸( Ideal Size...为此,我们首先需要理解 SwiftUI 布局原理。 SwiftUI 布局是一个协商过程。视图向子视图提供建议尺寸,子视图返回需求尺寸。...视图是否根据子视图需求尺寸来放置子视图,以及子视图是否根据视图给出建议尺寸来返回需求尺寸,完全取决于视图和子视图预设规则。...VStack 会结合视图优先级,它视图给其建议尺寸,在摆放时对子视图提出最终建议尺寸。...GeometryReader 常用于需要限定比例场景,例如让视图占据可用空间 25% 宽度,或者像上文中根据给定高宽比来计算高度。

39970

SwiftUI 布局协议 - Part 1

早在2019年,我写了一篇文章SwiftUI 中 frame 表现[1],其中,我阐述了视图和子视图如何协调形成最终视图效果。那里描述许多情况需要通过观察不同测试结果去猜测。...就像我在以前文章 SwiftUI 中 frame 表现 所描述那样,在布局过程中,视图给子视图提供一个尺寸,但最终还是由子视图决定如何绘制自己。然后,它将此传达给视图,以便采取相应动作。...并非如此,子视图仍然会使用 300pt 绘制,但是视图将会布局其他视图,就好像子视图只有 100pt 宽度一样。结果呢,我们将会有一个超出边界视图,但是周围视图不会被图片额外使用空间影响。...对于一个具体宽度,例如 45,视图提供也是 45pt,这个视图应该由提供宽度来决定自身尺寸 对于宽度为 0.0,子视图应该响应为最小尺寸 对于宽度为 .infinity ,子视图应该响应为最大尺寸...将会调用 sizeThatFits 方法决定我们布局容器尺寸,当我们写这个方法我们应该认为我们既是视图又是子视图:当作为视图时需要询问子视图尺寸,当我们是子视图时,要基于我们子视图回复告诉视图需要尺寸

3.2K10

SwiftUI 布局 —— 尺寸( 下 )

当用布局容器创建合成视图时,必须将构成后合成视图容器布局影响考虑到其中。针对不同需求,选择恰当容器。...这种直接在 CALayer 层面进行修改,并不会对布局造成影响 上面或许就是你想要效果,但如果想实现让位移后视图能够对它视图( 容器 )布局有所影响 ,或许就需要换一种方式 —— 用布局容器而非...fixedSize fixedSize 为子视图特定维度提供未指定模式( nil )建议尺寸,以使其在该维度上将理想尺寸作为其需求尺寸返回,并以该尺寸作为自身需求尺寸返回给视图。...,获取子视图宽度需求尺寸 // idealWidth 有值,且视图宽度建议尺寸为未指定模式,需求宽度为 idealWidth if let idealWidth, proposal.width...contentWidth) } // 将上面确定需求宽度作为建议宽度,获取子视图需求高度 let contentHeight = content.sizeThatFits(

2.5K40

玩转 Xcode Playground(上)

在 Xcode 中,通过点击代码左侧行数上执行按钮(需要按钮颜色为蓝色)来指定当前执行结束位置。...image-20211223180328839 点击当前结束位置之后蓝色执行按钮可以继续向下执行。点击代码编辑区域下方执行按钮,将重新执行全部代码。...image-20211223150747157 长按代码编辑区域下方执行按钮,可以在两种模式中进行选择。 在 Xcode 配置中,可以为 Playground 指定适合快捷键,提高操作效率。...image-20211224105528272 实时视图支持 SwiftUI 视图以及 UIKit(AppKit)视图视图控制器。SwiftUI 视图需要通过 setLiveView 来设定。...如果 Playground Page 被设置在 macOS 模式,该目录中内容可以在不同 Playground 项目 macOS 模式 Page 中共享。

3.9K20

SwiftUI数据流之State&Binding

环境 MacOS 10.15.5 Xcode 12.0 beta @State A property wrapper type that can read and write a value managed...通常使用场景是把当前View中@State值类型传递给其子View,如果直接传递@State值类型,将会把值类型复制一份copy,那么如果子View中对值类型某个属性进行修改,View不会得到变化...,为了简化内容说明核心问题,只有两行内容,视图是ProductsView,其中嵌套着子视图FilterView和列表元素,为了能够使得FilterView中对showFavorited修改能够传递回视图...,这是因为@State 修饰属性所有相关操作和状态改变都应该是和当前视图生命周期保持一致,当视图没有被初始化完成时,无法完成状态属性和视图之间绑定关系;_location不在是nil,其中保存了众多标记视图唯一性信息...,这里没有全部展示出来; 再点击一次Count+1按钮,count值变为2,user地址将持续保持不变,生命周期与视图保持一致。

3.9K30

SwiftUI 视图中打开 URL 若干方法

访问我博客 www.fatbobman.com[1] 可以获得更好阅读体验 本文将介绍在 SwiftUI 视图中打开 URL 若干种方式,其他内容还包括如何自动识别文本中内容并为其转换为可点击链接...image-20220520182722773 SwiftUI 1.0( iOS 13、Catalina ) 在视图中,开发者通常需要处理两种不同打开 URL 情况: 点击一个按钮( 或类似的部件...)打开指定 URL 将文本中部分内容变成可点击区域,点击后打开指定 URL 遗憾是,1.0 时代 SwiftUI 还相当稚嫩,没有提供任何原生方法来应对上述两种场景。...3.0 时代,随着 Text 功能增强和 AttributedString 出现,SwiftUI 终于补上了另一个短板 —— 将文本中部分内容变成可点击区域,点击后打开指定 URL。...SwiftUI 视图中打开 URL 几种方法,不过读者应该也能从中感受到 SwiftUI 三年来不断进步,相信不久后 WWDC 2022 会为开发者带来更多惊喜。

7.6K31

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

一、背景 苹果于2019年度WWDC全球开发者大会上,发布了基于Swift建立声明式框架--SwiftUI,其可以用于watchOS、tvOS、macOS等苹果旗下产品应用开发,统一了苹果平台UI...目前想要体验SwiftUI,需要以下准备:Xcode 11 beta和macOS Mojave or Higher,如果想要体验实时预览和完整Xcode 11功能,需要macOS 10.15 beta...通过简单几行代码,设置了按钮点击事件,样式和文案。...通过该结构发现,与UIKit布局结构有很大不同,像按钮一些属性background、padding、cornerRadius等不应该出现在视图主结构中,应该出现在Button视图结构中。...Apple选择了直接在macOS上进行渲染,不过需要搭载有SwiftUI.frameworkmacOS 10.15才能够看到Xcode Previews界面。

5.7K10

点亮你 App 5 个 iOS 库

DimensionsPickerView 只需要几行代码,DimensionsPickerView 就可让您添加一个漂亮视图,该视图可用于测量数据输入。...可通过以下方式自定义占位符单位,字体颜色,间距和边框颜色/宽度: sizePickerView.textFieldConfigureBlock = { index, field in switch...TransitionButton TransitionButton是一个用于添加带有加载和过渡动画 UIButton 库。首先,TransitionButton 是 UIButton 子类。...TransitionButton 还添加了两个主要方法: • startAnimation():调用时将开始使用加载微调器为按钮设置动画 • stopAnimation():调用时将停止对按钮进行动画处理...Sliders Sliders是完全使用 SwiftUI 构建库。它使您可以在 iOS,macOS 和 Mac Catalyst 上创建可自定义水平和垂直滑块。

60620

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

趁着最新更新正是版本 Xcode 11 于是就有这一篇 Xcode工作流改进(Workflows) 工程创建 [1240] 创建工程进来,就会发现 User Interface 可以进行选择 SwiftUI...Editor and Canvas:代码编辑器和 SwiftUI预览视图。 Editor and Assistant:代码编辑器和辅助视图。...其中说明一下:SwiftUI 预览 系统最低要求macOS 10.15 [1240] Add Editor 提供了编辑窗口任意切割功能: 可以指定文件打开位置。...综合这个功能还是不错,我经常也会打开多个页面!来回进去出来麻烦! [1240] 直接点击这个按钮,会横向进行分割。...~~~大局观 并且你可以通过 MiniMap 快速跳转到文件任何区域。MiniMap 支持代码标记, 断点显示,以及搜索高亮提示,非常多便捷功能。

2.5K40
领券