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

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

在拖动过程中,Y 轴的刻度会变大。在我的例子中,不拖动时从 0 75,拖动时从 0 100。有什么办法可以阻止这种情况吗?...场景的内容视图定义了场景创建的窗口中的视图内容,场景本身定义了应用程序的整体结构。SwiftUI 4.0 中,WindowGroup 获得了相当大的更新,真正具备了开发 macOS 应用的能力。...最近,我注意 SwiftUI 视图的 onAppear 在意想不到的时间启动,比如当 UITabBarController 被创建时,而不是当视图本身出现时。...事实上,这些视图( 惰性容器中的视图 )一旦被创建,其存续期将持续惰性容器被销毁为止。请阅读 SwiftUI 视图的生命周期研究[12] 了解更多内容。...除了使用习惯外,还应考虑偏移后的视图是否需要会对周边的视图产生影响( 布局层面 )。详情请阅读 在 SwiftUI 中实现视图居中的若干种方法[14] 。

12.2K20

SwiftUI 的方式进行布局

最近时常有朋友反映,尽管 SwiftUI 的布局系统学习门槛很低,当真正面对要求较高的设计需求时,好像又无从下手。SwiftUI 真的具备创建复杂用户界面的能力吗?...在初始状态时( show == false ),视图一( 红色视图 )的底部与屏幕底部对齐,当 show == true 时,视图二( 绿色视图 )的底部与屏幕底部对齐。...padding 是在布局层面进行的调整,添加 padding 后的视图,同时也会对其他视图的布局产生影响。...offset 则是在渲染层面进行的位置调整,即使出现了位置变化,其他视图在布局时,并不会将其位移考虑在其中。...五、LayoutPriority 在 SwiftUI 中,设置视图优先级( 使用 layoutPriority )是一个好用并不常用的功能。

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

SwiftUI 的方式进行布局

最近时常有朋友反映,尽管 SwiftUI 的布局系统学习门槛很低,当真正面对要求较高的设计需求时,好像又无从下手。SwiftUI 真的具备创建复杂用户界面的能力吗?...在初始状态时( show == false ),视图一( 红色视图 )的底部与屏幕底部对齐,当 show == true 时,视图二( 绿色视图 )的底部与屏幕底部对齐。...padding 是在布局层面进行的调整,添加 padding 后的视图,同时也会对其他视图的布局产生影响。...offset 则是在渲染层面进行的位置调整,即使出现了位置变化,其他视图在布局时,并不会将其位移考虑在其中。...五、LayoutPriority 在 SwiftUI 中,设置视图优先级( 使用 layoutPriority )是一个好用并不常用的功能。

4.7K80

掌握 SwiftUI 的 Safe Area

除非开发者明确要求视图突破安全区域的限制,否则 SwfitUI 将尽力确保开发者创建的视图都被布局安全区域当中。SwiftUI 同时提供了一些方法和工具让开发者对安全区域有所控制。...本文将探讨如何在 SwiftUI 中获取 SafeAreaInsets、将视图绘制安全区域之外、修改视图的安全区域等内容。...在默认的情况下会将用户视图置于安全区之内,因此我们只能得到如下的结果: image-20211120141245282 为了让视图能够突破安全区域的限制,SwiftUI 提供了 ignoresSafeArea...横向扩展.ignoresSafeArea(edges:.horizontal) 使用起来非常直观、方便,为什么视图会在有键盘输入时出现不符合预期的行为?...尽管使用 safeAreaInset 为列表在底部添加状态栏或自定义 TabBar 非常方便,如果你的列表中使用了 TextField,情况将变得很麻烦。

7.5K31

SwiftUI 布局 —— 对齐

VerticalAlignment.top 、VerticalAlignment.center 、VerticalAlignment.bottom 则分别标识了顶部、中心和底部( 沿视图垂直轴 )。...容器按照预设的行为( 在指定轴向排列、点对齐、线对齐 、添加间隙等 )在一个虚拟的画布中摆放所有的子视图。...,减少调用次数 ) { // 虚拟画布左上角的偏移值 ( 0,0 ) let offsetX = cache.cropBounds.minX * -1 let offsetY...Text("Hi") .layoutValue(key: Alignment.self, value: .topTrailing) // 一种子视图最近容器传递信息的方式 }...总结 虽然本文并没有提供具体的对齐使用技巧,只要你理解并掌握了对齐的两大要点:以什么为对齐指南、对哪些视图进行“对齐”,那么相信一定会减少你在开发中遇到的对齐困扰,并可以通过对齐实现很多以前不容易完成的效果

6.2K20

SwiftUI 中布局的工作原理

有些事情已经解释过了,有些可能是你自己弄明白的,更多的是你在这一点上想当然的事情,所以我希望一个详细的探索能真正为 SwiftUI 的工作方式提供一些启示。...在幕后,SwiftUI 执行第四步:尽管它将位置和大小存储为浮点数,但在渲染时,SwiftUI 会将所有像素舍入最接近的值,这样我们的图形仍然清晰。...中,我您解释过,当您对视图应用修饰符时,我们实际上会得到一个名为ModifiedContent的新视图类型,它存储了原始视图及其修饰符。...当涉及视图及其修改器时,SwiftUI有效地从下到上工作。 现在考虑一下这个布局: Text("Hello, World!")...然后,当答案从文本视图返回时,padding()根据请求在每侧添加20个点来填充它。 所以,更像这样: SwiftUI:ContentView,你可以拥有整个屏幕,你需要多少?

3.7K20

Android中文API——ScrollView

(译者注: 如何监听android的屏幕滑动停止事件) 参数 velocityY Y方向的初始速率。正值表示手指/光标屏幕下方滑动,而内容将向上滚动。...此方法将视图滚动到顶部或者底部,并且将焦点置于新的可视区域的最顶部/最底部组件。若没有适合的组件做焦点,当前的ScrollView会收回焦点。...参数 x     滚动到的X位置 y     滚动到的Y位置 public void setFillViewport (boolean fillViewport) 设置当前滚动视图是否将内容高度拉伸以填充视图可视范围...缺省的偏移是在当前视图滚动的偏移。 返回值 滚动条的滑块垂直方向的偏移。...返回值 滚动底部能见度,值的范围在浮点数0.0f1.0f之间。 protected float getTopFadingEdgeStrength () 返回滚动顶部的能见度。

4.5K30

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

你可以使用符合 ObservableObject 协议的不同对象来分割失效的范围有时,不依赖 @Published 而获得一些手动控制并直接 objectWillChange 发布变化是很有用的添加一个中间视图...阅读 The SwiftUI Layout Protocol [11]了解如何创建自定义布局。创建从底部开始的滚动视图Q:我如何实现一个在底部对齐的滚动视图,在 macOS 上会不会有糟糕的性能?...将背景扩展安全区域Q:如果我有一个自定义的容器类型,可以接受一个顶部和底部视图,是否有办法让 API 的调用者将所提供的视图的背景扩展安全区域内,同时将内容( 如文本或按钮 )保留在安全区域内?...然后让顶部/底部视图忽略安全区域。我不确定这是否能满足你的用例,值得一试。在 background 修饰器中,可以通过 ignoresSafeAreaEdges 参数设置是否忽略安全区域。...将视图的功能分散函数、更小的视图结构以及视图修饰器当中是很好的解决方法。

14.7K30

优化在 SwiftUI List 中显示大数据集的响应效率

找寻问题原因 或许有人会认为,毕竟数据量较大,进入列表视图有一定的延迟是正常的。即使在 SwiftUI 的效能并非十分优秀的今天,我们仍然可以做到以更小的卡顿进入一个数倍于当面数据量的列表视图。...一旦为这些子视图添加了 id 修饰符,这些视图将无法享受到 List 提供的优化能力 ( List 只会对 ForEach 中的内容进行优化)。...虽然我们已经找到了导致进入列表视图卡顿的原因,如何在不影响效率的情况下通过 scrollTo 来实现列表端点的滚动呢?...解决方案一 从 iOS 15 开始,SwiftUI 为 List 添加了更多的定制选项,尤其是解除了对列表行分割线设置的屏蔽且添加了官方的实现。...总结 相较于 UIKit ,已经推出了 3 年的 SwiftUI 仍有很多的不足。回首最初的版本,现在我们已经可以实现太多以前无法想象的功能。期盼 6 月的 WWDC 会带来更多的好消息。

9K20

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

欢迎大家在 Discord 频道[2] 中进行更多地交流将某个视图在父视图中居中显示是一个常见的需求,即使对于 SwiftUI 的初学者来说这也并非难事。...即使文本宽度超出了 HStack 给出的建议宽度, HStack 在布局时,仍会保留其最小厚度,导致下图上方的文本无法充分利用矩形视图的宽度。解决方法为:Spacer(minLength: 0)。...image-20220829152914736将合成后的视图放置在某个可能会充满屏幕的视图的顶部或底部显示结果或者与你的预期不符 VStack { // Hello world 视图 1...请阅读 SwiftUI 布局 —— 对齐[5] ,了解更多有关 ZStack、overlay、background 的对齐机制Geometry虽然有些大材小用,当我们需要获取更多有关视图的信息时,GeometryReader...我为本文这种通过多种方法来解决一个问题的方式添加了【小题大作】标签,目前使用该便签的文章还有:在 Core Data 中查询和使用 count 的若干方法[6]、在 SwiftUI 视图中打开 URL

6.6K40

SwiftUI 布局协议 - Part2

placeSubviews 仅限于剩下的视图,如此直到没有别的视图。...但是,我们也可以组合一些不同布局容器中。在下一个例子中我们将会把前三个视图水平的放置在视图顶部,后三个水平的放置在底部。剩下的视图将会在中间,垂直排列。...此外,在与其他视图布局工作的时候,我们就相当于 SwiftUI 的角色。子布局的任何缓存创建和更新都属于我们的责任,幸运的是,这都很容易处理。我们只需要添加子布局缓存到我们自己的缓存里。...同时也要注意,这里有一个好的选择,即放置具有垂直和水平的滚动 ScrollView 中。 注意这是基本实现,仅用于说明如何实现。还有许多潜在的优化,制作树布局所需的关键元素都在这里。...一个有用的调试工具 回到当 SwiftUI 刚发布的时候,我尽力搞清楚布局是如何工作的,我希望我有一个像我今天要介绍的这种工具 。直到现在,它都是最好的工具,用来添加围绕视图的边框观察视图边缘。

2.7K30

SwiftUI 动画进阶 — Part4:TimelineView

SwiftUI 没有理由重新计算视图的主体。2021 年 WWDC 的一个精彩演讲是 Demystify SwiftUI。它解释了视图标识、生命周期和依赖关系。...我们的调度程序会记住最后日期并添加适当的偏移量。当没有更多的偏移量时,它会循环回到数组中的第一个。...认识我们的新项目朋友,跳跃的家伙: 如果你仔细观察动画,你会注意这个表情符号角色的许多参数在不同的时间点发生了变化。这些参数是:y-offset、rotation 和 y-scale。...稍后在你的视图中,你将根据动画类型创建动画值,使用偏移值的持续时间对其进行实例化。...第一种情况更灵活,更冗长。也就是说,我们被迫为每个动画指定持续时间,但是,它更灵活,因为我们可以自由使用与偏移量不匹配的持续时间。

3.7K30

高级 SwiftUI 动画 — Part 1:Paths

每当视图上的可动画参数发生变化时,SwiftUI 就会从旧值新值制作动画。一些可动画的参数包括大小(size)、偏移(offset)、颜色(color)、比例(scale)等。...SwiftUI 已经为不透明度制作了动画,而不需要我担心这一切。是的,这是真的,只要 SwiftUI 知道如何将数值从原点插值终点。对于不透明度,这是一个直接的过程,SwiftUI 知道该怎么做。...你只需要添加 .drawingGroup() 修饰符: FlowerView().drawingGroup() 根据 WWDC 2019, Session 237(用SwiftUI构建自定义视图):绘图组是一种特殊的渲染方式...它基本上会将 SwiftUI 视图平铺到一个单一的 NSView/UIView 中,并用 Metal 进行渲染。跳到 WWDC 视频37:27 了解更多细节。...如果你想尝试一下,你的形状还没有复杂让设备挣扎的地步,添加一些渐变和阴影,你会立即看到不同。 接下来有什么内容? 在本文的第二部分,我们将学习如何使用 GeometryEffect 协议。

3.7K20

SwiftUI 布局 —— 尺寸( 上 )

淡化尺寸概念的初衷或许是出于以下两点: 引导开发者转型声明式编程逻辑,转变使用精准尺寸的习惯 掩盖 SwiftUI 中复杂的尺寸概念,减少初学者的困扰 但无论如何淡化或掩盖,当涉及更加高级、复杂、精准的布局时...对于不包含子视图视图来说( 例如 Text 这类的元视图 ),它们同样会提供接口供父视图来调用以其传递建议尺寸并获取其需求尺寸。...因此,为了简化文字,我们在文章中会将视图与具备布局能力的容器等同起来。 不过需要注意的是,在 SwiftUI 中,有一类视图是会在视图树上显示为父视图并不具备布局能力。...渲染尺寸 在布局的第二阶段,当 SwiftUI 的布局系统调用布局容器( 符合 Layout 协议 )的 placeSubviews 方法时,布局容器会将每个子视图放置在给定的屏幕区域( 尺寸通常与该布局容器的需求尺寸一致...比如:当固定高度的子视图的总高度已经超出了 VStack 获得的建议尺寸高度,那么 Spacer 就只能获得高度为 0 的渲染尺寸 多数情况下,渲染尺寸与子视图的最终显示尺寸( 视图尺寸 )一致,并非绝对

4.6K20

SwiftUI 布局 —— 尺寸( 下 )

VerticalAlignment.center, computeValue: {$0[.top]}) } } } 虽然 IconDemo1、IconDemo2、IconDemo3 在单独预览时看起来完全一样,如果将它们放置其他的布局容器中...当用布局容器创建合成视图时,必须将构成后的合成视图对父容器的布局影响考虑其中。针对不同的需求,选择恰当的容器。...这种直接在 CALayer 层面进行的修改,并不会对布局造成影响 上面或许就是你想要的效果,如果想实现让位移后的视图能够对它的父视图( 容器 )的布局有所影响 ,或许就需要换一种方式 —— 用布局容器而非...对齐[5] 一文中我们已经介绍了“对齐”是发生在容器中子视图之间的行为,因此对于 _FrameLayout 这种开发者只提供一个子视图同时又需要对齐的布局容器,我们需要通过在 modifier 中添加一个...(.init(width: width, height: height)) // 视图提交上方确定的建议尺寸,并获取子视图的需求尺寸 return size // 以子视图的需求尺寸作为

2.5K40

高级 SwiftUI 动画 — Part 2:GeometryEffect

请注意,这些变化将影响视图,但不会影响其祖先或后代的布局。 因为GeometryEffect也符合Animatable,你可以添加一个animatableData属性,然后你就有了一个可动的效果。...最重要的是,我们还要告诉效果,我们是向右还是向左移动视图,所以它可以一边倾斜,或者另一边倾斜: struct SkewedOffset: GeometryEffect { var offset...虽然SwiftUI已经有了一个修饰符,即.rotrotation3DEffect(),这个修饰符将是特别的。每当我们的视图旋转到足以向我们展示另一面时,一个布尔绑定将被更新。...你会注意,三维旋转变换可能与你在核心动画中的习惯略有不同。在SwiftUI中,默认的锚点是在视图的前角,而在Core Animation中是在中心。...背面总是一样的,正面却每次都在变化。因此,这不是简单的为一面展示一个视图,为另一面展示另一个视图。我们不是基于flipped的值,而是要监测flipped的值的变化。

1.2K30

SwiftUI + Core Data App 的内存占用优化之旅

此时请不要惊讶,你可以尝试点击添加数据按钮继续增加数据,再次滚动到底部,你将看到更加令人震惊的内存占用数值,不过有极大的可能会看不到( 应用已经崩溃了 )。...尽管从表面上来看,惰性容器仅会在视图进入可视区域时才会对其进行操作,一旦该视图被显示过( body 被求过值 ),即使该视图离开可视区域,SwiftUI 仍会保存视图的 body 值。...在 400 条记录的情况下,滚动到底部,内存占用值差不多是 1.75 GB。尽管我们节省了差不多 70% 的内存占用,仍无法完全满足需求。...从当今移动开发的角度来说,行缓存好像存在的意义不大,考虑 Core Data 的前身主要用来处理金融类数据业务,在此种场景中,行缓存可以带来相当可观的收益。...即使我们在 onDisappear 中将该变量设置为 nil, SwiftUI 并没有释放之前它所占用的空间。

1.2K10

SwiftUI + Core Data App 的内存占用优化之旅

此时请不要惊讶,你可以尝试点击添加数据按钮继续增加数据,再次滚动到底部,你将看到更加令人震惊的内存占用数值,不过有极大的可能会看不到( 应用已经崩溃了 )。...尽管从表面上来看,惰性容器仅会在视图进入可视区域时才会对其进行操作,一旦该视图被显示过( body 被求过值 ),即使该视图离开可视区域,SwiftUI 仍会保存视图的 body 值。...在 400 条记录的情况下,滚动到底部,内存占用值差不多是 1.75 GB。尽管我们节省了差不多 70% 的内存占用,仍无法完全满足需求。...从当今移动开发的角度来说,行缓存好像存在的意义不大,考虑 Core Data 的前身主要用来处理金融类数据业务,在此种场景中,行缓存可以带来相当可观的收益。...即使我们在 onDisappear 中将该变量设置为 nil, SwiftUI 并没有释放之前它所占用的空间。

2.4K40
领券