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

SwiftUI中使用UIKit视图

SwiftUI中使用UIKit视图 如想获得更好阅读体验可以访问我博客www.fatbobman.com,或点击下方阅读原文 已迈入第三个年头SwiftUI相较诞生初始已经提供了更多原生功能...本文将通过对UITextField包装来讲解以下几点: •如何SwiftUI中使用UIKit视图如何让你UIKit包装视图具有SwiftUI风格•SwiftUI使用UIKit视图需要注意地方...如果你已经对如何使用UIViewRepresentable有所掌握,可以直接从SwiftUI风格化部分阅读 基础 具体演示包装代码之前,我们先介绍一些与SwiftUI中使用UIKit视图有关基础知识...将UIKit视图包装成SwiftUI视图时,我们需要了解两者生命周期之间不同,不要强行试图找到完全对应方法,要从SwiftUI角度来思考如何调用UIKit视图。...image-20210823091321562 查看源代码 避免滥用UIKit包装 尽管SwiftUI中使用UIKit或AppKit并不麻烦,但是当你打算包装一个UIKit控件时(尤其是已有SwiftUI

8.1K20

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

这是由于 HStack 高度是由容器子视图对齐排列后高度决定。...Spacer HStack 中只能进行横向填充,并不具备纵向高度高度为 0 ),因此 HStack 最终需求高度与 Text 高度一致。...那么 HStack、VStack 会在明确了所有固定尺寸子视图需求尺寸后,将所剩可用尺寸( HStack、VStack 视图给他们建议尺寸 - 固定尺寸子视图需求尺寸 )平均分配( 优先级相同情况下...万变不离其宗,掌握了 SwiftUI 布局原理,无论需求如何变化都可轻松应对。...我为本文这种通过多种方法来解决一个问题方式添加了【小题大作】标签,目前使用该便签文章还有: Core Data 中查询和使用 count 若干方法[6]、 SwiftUI 视图中打开 URL

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

SwiftUIHStack 和 VStack 切换

一种方式是用 GeometryReader 测量当前可用空间,并根据宽度是否大于其高度,可以选择使用 HStack 或 VStack 来渲染内容。...DynamicStack 使用了与 HStack 和 VStack 相同 API ,现在可以 LoginActionsView 中直接将以前 VStack 换成新自定义实例: struct...虽然我们也有很多方法能解决这些问题(例如使用类似在这篇 Q&A 中用来使多个视图具有相同宽度和高度技术),但真正问题是当我们要动态的确定方向时,测量可用空间是否是一个好方法。...所有这些仍然使用紧凑垂直布局,它使用空间不超过渲染其内容所需空间。...使用布局协议 虽然我们最后已经用了非常棒解决方案,可以在所有支持 SwiftUI iOS 版本中使用,但也让我们来探索一下 iOS 16 中引入一些新布局工具(写这篇文章时,它作为

2.8K10

使用 SwiftUI 创建一个灵活选择器

使用 UIKit 时,我总是将这种类型视图实现为具有特定 UICollectionViewFlowLayout UICollectionView。但在 SwiftUI 中该如何实现呢?...,我们必须计算 VStack 高度,以使 SwiftUI 更容易解释我们视图组件。...VStack 高度是根据两个值计算: 输入数据中任何项目的高度(类似于宽度计算,通过使用 reduce 函数,总结与项目相关所有高度) 将显示 VStack 中行数 private func...总结 这篇文章介绍了如何使用 SwiftUI 构建一个灵活选择器(FlexiblePicker),用于选择多个选项。...然后,详细介绍了实现该选择器逻辑,包括如何处理选项布局、宽度和高度,以及如何处理用户与按钮交互。 最后,提供了一个简单视图实现,可以 SwiftUI 中使用该选择器。

24720

SwiftUI 布局协议 - Part 1

这类型常常被作为视图容器,虽然布局协议是今年新推出(至少公开来说),但是我们第一天使用 SwiftUI 时候就在使用了,当每次使用 HStack 或者 VStack 放置视图时都是如此。...就像我以前文章 SwiftUI 中 frame 表现 所描述那样,布局过程中,父视图给子视图提供一个尺寸,但最终还是由子视图决定如何绘制自己。然后,它将此传达给父视图,以便采取相应动作。...无论如何没有缓存情况下编写我们布局更简单一点,当我们以后需要时再添加。SwiftUI 已经做了一些缓存。例如,从子视图代理获得值会自动存储缓存中。相同参数反复调用将会使用缓存结果。...那么我们为什么一直 ViewBuilder中使用布局容器,就好像它们是视图一样?事实证明,当你用代码放置你布局时,会有一个系统函数调用来产生视图。那这个函数叫什么呢?...} 所以你明白了,布局类型并不是视图,但是当你 SwiftUI 中使用它们时候它们就会产生一个视图

3.2K10

如何SwiftUI 视图中显示应用图标和版本

本文中,我将展示如何创建一个可访问 SwiftUI 视图,既能显示应用图标和版本,又能在各种文本大小和外观下看起来都很好:获取应用图标构建视图第一步是从主包中获取应用图标。...创建 SwiftUI 视图现在让我们将所有内容结合起来,创建一个 SwiftUI 视图,显示应用图标和版本:AppVersionInformationView.swiftimport SwiftUIstruct...我们使用 fixedSize() 修饰符确保应用图标和 VStack 视图高度相同。最后,我们将所有视图组合成一个可访问元素,并为其提供标签,以便为 VoiceOver 用户提供更好体验。...获取到应用图标和版本信息后,我们创建了一个 SwiftUI 视图来展示这些信息。该视图使用水平堆栈(HStack)布局,将应用图标和版本信息并排显示。...同时,我们通过使用 fixedSize() 修饰符确保视图高度一致,并使用 accessibilityElement 使其对 VoiceOver 用户友好。

10500

SwiftUI 中用 Text 实现图文混排

欢迎大家 Discord 频道[2] 中进行更多地交流SwiftUI 提供了强大布局能力,不过这些布局操作都是视图之间进行。...一个和一组 SwiftUI 中,Text 是使用频率最高几个组件之一,几乎所有的文字显示操作均由其完成。随着 SwiftUI 版本不断提升,Text 功能也得到持续地增强。...Text 中使用 SF SymbolsSF Symbols[5] 是苹果为开发者带来一份厚礼,让开发者可以苹果生态中近乎免费地使用由专业设计师创建海量图标。...image-20220814173320321 SwiftUI 中,除非进行了特别的设置,否则所有字体尺寸都会跟随动态类型变化而变化。...,需要提供分辨率较高原始图片,这样会造成更多系统负担方案二: Text 上使用覆盖视图方案二解决思路不使用预制图片,通过 SwiftUI 视图创建标签根据标签视图尺寸创建空白占位图片在 Text

4.2K30

SwiftUI水平条形图

SwiftUI水平条形图 水平条形图以矩形条形式呈现数据类别,其宽度与它们所代表数值成正比。本文展示了如何在垂直条形图基础上创建一个水平柱状图。 水平条形图不是简单垂直条形图旋转。...Bar Chart with multiple data sets in SwiftUI SwiftUI水平条形图 将条形图转换为水平 水平条形图不仅仅是垂直条形图上配置,有一些元素是可以重复使用...对于垂直条形图组件和水平条形图组件来说,重复使用一些结构和SwiftUI视图并不简单。标题和关键区域可以原样重用。创建BarChartView副本,并将其名称改为BarChartHView。...它控制了图表布局,其中三个视图被改为YaxisHView、ChartAreaHView和XaxisHView,它们最初只是垂直条形图中使用视图副本。...这可能是将这些组件分解成更小SwiftUI视图并通过组合来重用原因。

4.7K20

掌握 ViewThatFits

iOS 16 中,SwiftUI 增加了一个新自适应布局容器 ViewThatFits。正如其名称所示,它作用是在给定多个视图中找出最合适视图使用。...它只检查阶段使用视图理想尺寸进行判断,最终呈现阶段,它将向子视图提交有值建议尺寸,并使用视图需求尺寸作为自身需求尺寸。...ScrollView:如果理想状态轴与滚动方向一致,则在滚动方向上一次性展示所有的子视图而无视父视图建议尺寸。 VStack、HStack、ZStack:所有视图在理想状态下整体呈现。...高度:VStack 将所有视图理想尺寸高度和 Spacing 和作为自己需求尺寸。...SwiftUI 提供了两个版本 fixedSize ,我们当前使用版本要求视图水平和垂直两个轴向上都使用理想尺寸,而另一个版本允许我们对单个轴向进行限定。

15710

SwiftUI 布局 —— 尺寸( 上 )

但由于 SwiftUI 视图并没有提供尺寸这一属性,因此即使 SwiftUI 诞生了数年后今天,如何获取视图尺寸仍然是网络上热门问题。...淡化尺寸概念初衷或许是出于以下两点: 引导开发者转型到声明式编程逻辑,转变使用精准尺寸习惯 掩盖 SwiftUI 中复杂尺寸概念,减少初学者困扰 但无论如何淡化或掩盖,当涉及更加高级、复杂、精准布局时...某些布局容器(比如 VStack、HStack ),会通过为其子视图代理提供最小化模式建议尺寸以获取子视图特定维度下最小需求尺寸( 例如对视图使用了 minWidth 设定 ) 最大化模式 该模式建议尺寸为...,需求尺寸为单行完整显示所需宽和高 85.33 x 20.33 不同视图相同建议模式及尺寸下会返回不同需求尺寸这一事实既是 SwiftUI 特色也是十分容易很让人困扰地方。...视图尺寸 视图渲染后屏幕上呈现尺寸,也是热门提问 —— 如何获取视图尺寸中所指尺寸。 视图中可以通过 GeometryReader 获取特定视图尺寸及位置。

4.6K20

SwiftUI 布局 —— 尺寸( 下 )

相同长相、不同内涵 SwiftUI 中,我们可以利用不同布局容器生成看起来几乎一样显示结果。...面子和里子 与 UIKit 和 AppKit 类似,SwiftUI 布局操作是视图层面( 里子 )进行,而所有针对关联图层( backing layer )操作仍是通过 Core Animation..._FrameLayout 容器该维度上需求尺寸,另一维度需求尺寸则使用视图该维度上需求尺寸( 以 A 及 _FrameLayout 获得建议尺寸作为子视图建议尺寸 ) func sizeThatFits...top), anchor: .topLeading, proposal: .init(width: bounds.width, height: bounds.height)) } 现在我们已经可以视图中使用...SwiftUI 布局机制窗口,无论你未来工作中是否需要使用 Layout 协议创建自定义布局容器,掌握它都将获得莫大好处。

2.6K40

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

SwiftUI 视图生命周期研究[3] 一文中,我对 List 如何对子视图显示进行优化做了一定介绍。...进一步排除掉 ScrollViewReader 影响后,所有的迹象都表明用于给 scrollTo 定位 id 修饰符可能是导致延迟罪魁祸首。...标识( Identity )是 SwiftUI 程序多次更新中识别相同或不同元素手段,是 SwiftUI 理解你 app 关键。... SwiftUI 中为视图设置显式标识目前有两种方式: ForEach 构造方法中指定 由于 ForEach 中视图数量是动态且是在运行时生成,因此需要在 ForEach 构造方法中指定可用来标识子视图...解决方案二 认识到 ScrollViewProxy 以及 ForEach 中使用 id 修饰符两者异常表现后,我们只能尝试通过调用底层方式来获得更加完美的效果。

9.1K20

SwiftUI 布局:如何自定义 AlignmentGuides

SwiftUI 为我们提供了视图不同边缘对齐指南(.leading、trailing、top等)以及.center和两个基线选项来帮助文本对齐。...然而,当您处理不同视图之间分割视图时,这些方法都不能很好地工作——如果您必须使在用户界面完全不同两个视图部分对齐。...为了解决这个问题,SwiftUI 允许我们创建自定义对齐辅助线,并在整个 UI 视图中使用这些辅助线。在这些视图之前或之后发生什么并不重要,它们仍然会排成一条线。...()修饰符,该视图应该如何对齐。...我建议您尝试我们示例前后添加更多文本视图SwiftUI 将重新定位所有内容,以确保我们对齐两个视图保持不变。

98510

为什么SwiftUI视图使用结构体?

struct or class 通常这不是问题,但是有一个名为UIStackView特定子类,它类似于SwiftUIVStack和HStack。...SwiftUI中,我们所有视图都是简单结构体,几乎可以自由创建。想想看:如果您制作一个仅包含一个整数结构体,则结构体整个大小就是:一个整数。没有其他。...您会发现,类能够自由更改其值,这可能导致代码混乱——SwiftUI如何知道什么更改了值并需要更新UI?...通过生成不会随时间变化视图SwiftUI鼓励我们转向更具功能性设计方法:将数据转换为UI时,我们视图变成简单,惰性东西,而不是会失去控制智能化东西。...提示:如果您在视图中使用类,则可能会发现代码无法编译或在运行时崩溃。 相信我:使用结构体。

3.1K10

WWDC - SwiftUI - 初恋般感觉

我们将使用SwiftUI框架来构建Landmark详情界面。 Landmarks利用stacks将图片和文本组合起来来进行视图布局。你需要引用MapKit框架头文件来创建一个地图视图。...你可以通过Xcode新实时反馈功能,来优化你视图布局 。 第一节 创建一个使用SwiftUI新Xcode项目。浏览画布、预览和SwiftUI模板代码。...混合使用 现在我们需要创建一个地图视图。...你可以MapKit中MKMapView类来展示渲染地图界面。 SwiftUI中要使用UIView或者其子类,你需要让你view遵循UIViewRepresentable协议。...设置MapViewframe。 如果你只设置了Mapview高度,那么MapView会自动设置其宽度来适应父视图。所以MapView会充满宽度区域。

3.8K10

GeometryReader :好东西还是坏东西?

,并将所有视图原点与容器原点对齐(即放置左上角)。...至于如何传递获取几何信息(例如上文中使用 @State 或是通过 PreferenceKey),则取决于开发者编程习惯和场景需求。...与 GeometryReader 不同,满足 layout 协议布局容器能够布局阶段就获取到父视图建议尺寸和所有视图需求尺寸。这样可以避免由于反复传递几何数据导致大量视图反复更新。...visualEffect 允许开发者不破坏当前布局情况下(不改变其祖先和后代)直接在闭包中使用视图 GeometryProxy,并对视图应用某些特定 modifier。...简单来说,SwiftUI 让只作用于“面子”( 渲染层面) modifier 符合了 VisualEffect 协议,禁止闭包中使用所有能对布局造成影响 modifier( 例如:frame、padding

46270

SwiftUI 与 Core Data —— 数据定义

在上文中,我列举了一些 SwiftUI 中使用 Core Data 所遇到困惑及期许。...今后文章中我们将尝试用新思路来创建一个 SwiftUI + Core Data app,看看能否避免并改善之前一些问题。本文将首先探讨如何定义数据。...无需更改代码便可以适应不同框架( 纯 SwiftUI 驱动、TCA 或其他 Redux 框架 )所有视图均可以实现在不使用任何 Core Data 代码情况下进行预览,并可对 Mock 数据进行动态响应...或添加计算属性 )方式改善托管对象类型兼容度定义方便在 SwiftUI 环境中使用结构,并为托管对象创建扩展方法以实现转换struct TodoGroup { var title: String...),因此我们需要创建一个类型擦除容器,让 C_Group 和 MockGroup 都能在 GroupCellViewRoot 视图中使用

2.4K40

使用 SwiftUI Eager Grids

介绍 早在 2020 年,我们就拥有了 SwiftUI(LazyVGrid 和 LazyHGrid)中绘制网格视图控件。两年后,我们又获得了另一种在网格(Grid)中显示视图视图控件。...单元格视图仅在它们被滚动时创建,并且它们滚动时停止计算。 这篇文章主题 Eager Grids 正好相反。SwiftUI 不在乎它们是屏幕上还是屏幕外。所有视图都被同等对待。...这与我们从使用 HStack 容器第一天起就看到行为相同。但是,Grids 在这里为我们提供了一个选择。我们可以让单元格避免让网格增长以获得额外空间。...gridColumnAlignment 只能在每列一个单元格中使用。否则行为未定义。 以下示例中,您可以看到所有对齐组合: 单元格 (1,1):对齐顶部前导。...: 如果您不需要第三行,则无论如何都可以添加一个,但高度为零。

4.3K20

掌握 SwiftUI Safe Area

本文将探讨如何SwiftUI 中获取 SafeAreaInsets、将视图绘制到安全区域之外、修改视图安全区域等内容。... SwiftUI 中,开发者通常只有需要获取 StatusBar + NavBar 高度或 HomeIndeicator + TabBar 高度时才会使用到 safeAreaInsets 。...因此,无需使用任何额外代码,视图便自动获得了键盘避让能力。但有时,并非所有视图都需要将软键盘覆盖区域从安全区域中去除,因此需要正确地设置 SafeAreaRegions 。...使用 safeAreaInset 扩展安全区域 SwiftUI 中,所有基于 UIScrollView 组件(ScrollView、List、Form),默认情况下都会充满整个屏幕,但仍可确保我们可以安全区域内看到所有的内容...尽管使用 safeAreaInset 为列表底部添加状态栏或自定义 TabBar 非常方便,但如果你列表中使用了 TextField,情况将变得很麻烦。

7.5K31

为什么 SwiftUI 视图使用结构体

struct or class 通常这不是问题,但是有一个名为 UIStackView 特定子类,它类似于 SwiftUI VStack 和 HStack。... UIKit 中,UIStackView 是一种非渲染视图类型,旨在简化布局,但这意味着即使它因为继承原因具有背景色,也从未真正使用过。... SwiftUI 中,我们所有视图都是简单结构体,几乎可以自由创建。想想看:如果您制作一个仅包含一个整数结构体,则结构体整个大小就是:一个整数。没有其他。...通过生成不会随时间变化视图SwiftUI 鼓励我们转向更具功能性设计方法:将数据转换为 UI 时,我们视图变成简单,惰性东西,而不是会失去控制智能化东西。...**提示:**如果您在视图中使用类,则可能会发现代码无法编译或在运行时崩溃。

2.4K50
领券