swiftUI
swiftUI是跨苹果多平台的UI框架,在此记录一下学习的历程,和项目中遇到的实际问题。
saber@fate
android原生开发工程师,ios,mac原生开发工程师。
展开
-
SwiftUI之ForEach导致数组越界的问题
swiftUI 列表数组越界问题解决方案原创 2022-05-27 09:51:50 · 617 阅读 · 0 评论 -
swiftUI之如何进行sha256加密
swiftUI之如何进行sha256加密方法方法扩展data支持将字符串进行sha256加密import Foundationimport CommonCryptoimport CryptoKitfunc hexString(_ iterator:Array<UInt8>.Iterator) -> String{ return iterator.map{ String(format: "%02x", $0) }.joined()}exten原创 2021-08-12 17:10:21 · 593 阅读 · 0 评论 -
swiftUI之如何进行Base64编码和解码
swiftUI之如何进行Base64编码和解码实现方式实现方式只需扩展String,实现编码和解码的功能,即可方便的将字符串进行编码和解码。extension String { ///Base64编码 func encodBase64() -> String? { if let data = self.data(using: .utf8) { return data.base64EncodedString() }原创 2021-08-12 17:07:23 · 456 阅读 · 0 评论 -
swiftUI之获取当前时间的毫秒数
swiftUI之获取当前时间的毫秒数方法方法获取时间的毫秒数之需要扩展Date就行了extension Date{ /// 扩展date,获取当前时间的毫秒数 static var currentTimeStamp: String{ return String(Int64(Date().timeIntervalSince1970 * 1000)) }}很简单,做个备忘。...原创 2021-08-12 17:03:18 · 784 阅读 · 0 评论 -
SwiftUI之macOS如何读取移动储存设备中的文件
macOS如何读取移动储存设备中的文件概述方法概述在Mac中,所有应用都是跑在沙盒中,如果想访问沙盒以外的文件,则需要用户授权,授权方式则是需要用户选择对应的存储路径,确认后方可访问对应的文件目录。方法首先需要在沙盒选项中添加用户选择文件的读写权限:然后需要用到NSOpenPanel去打开路径选择的界面。 let open = NSOpenPanel() open.prompt = "描述" open.title = "选择路径"原创 2021-08-12 16:54:06 · 545 阅读 · 0 评论 -
macOS之如何删除插入u盘后会生成的._开头的隐藏文件
macOS之如何删除插入u盘后会生成的._开头的隐藏文件概述删除方法概述当你的移动存储设备插入Mac电脑中时,修改里面的文件就会在生成的文件里多增加了一个._开头的隐藏文件,当在window下显示隐藏文件就可以查看到,虽然没啥影响,但是如果有特殊开发需求的项目来说,这多余的文件将会造成很大的困扰。目前网上找的方法关闭生成都没啥用,唯一的办法就是将生成的文件全部删除。删除方法首先需要遍历所有的文件,拿到所有文件的路径/// 获取文件路径/// - Parameter dirPath: 根目录//原创 2021-08-12 16:35:07 · 5826 阅读 · 0 评论 -
swiftUI之macOS 打印功能解决文本被截断的问题
swiftUI之macOS 打印功能解决文本被截断的问题概述解决方案概述在之前的文章中介绍了macOS中如何调用打印功能,用那种方式如果只打印一页的内容,则无妨,如果是多页,则会出现文本前后被截断的问题如下图的效果:出现这样的问题,最大的原因就是打印view的时候没有处理分页,而是让系统自动分页,导致一个view绘制下来边界会被截断,所以,解决的这个问题的关键在于,如何在每一页只绘制一页所能展示的内容,数据上要做切割,然后还有一点是如何将切割好的数据,转移到对应的页面上去,关于这个问题我研究了好几天原创 2021-08-09 10:21:35 · 467 阅读 · 0 评论 -
swiftUI之macOS下如何调用系统打印功能
swiftUI之macOS下如何调用系统打印功能概述实现方式效果概述在macOS开发中,我们可能有需求是要打印我们编辑框输入的文本,或者保存文本为PDF文档,这个功能只需要调用系统的打印功能就可以实现了,不需要特殊的实现方式。实现方式首先需要定义一下NSPrintInfo,它可以控制页面的大小,边距等一些属性,然后我们需要将我们swiftUI上的view转化为NSView,这里就用到了NSHostingView。下面直接上代码: let printInfo: NSPrintInfo = NSPri原创 2021-07-31 15:29:39 · 702 阅读 · 0 评论 -
swiftUI基础之自定义ButtonStyle
自定义ButtonStyle概述实现概述按钮如果是纯色的话,可以不使用背景图片的方式,而使用自定义按钮样式的方式来实现,实现方式很简单,名称自己随意。实现很简单直接上代码,用了RoundedRectangle作为背景。可以自由发挥你的想象力去创作样式。struct PrintReportBtnStyle: ButtonStyle{ func makeBody(configuration: Configuration) -> some View { configurat原创 2021-07-31 15:01:42 · 554 阅读 · 0 评论 -
swiftUI1.0之macOS长文本编辑框自定义实现
swiftUI1.0之macOS长文本编辑框自定义实现概述具体代码实现效果概述长文本编辑框也是macOS中常用的控件之一,在macOS11.0之后系统已经提供了相关的控件,但是在这之前,自能通过自定义来实现,我们可以通过NSTextView配合NSScrollView来组合实现在swiftUI下的长文本编辑框。具体代码实现具体就直接上代码了,可以直接使用做个备忘import Combineimport SwiftUIstruct MacEditorTextView: NSViewRepres原创 2021-07-31 13:59:11 · 219 阅读 · 0 评论 -
swiftUI 1.0版本之macOS端树状结构列表自定义视图
swiftUI 1.0版本之macOS端树状结构列表自定义视图欢迎入坑swiftUI1.0具体实现欢迎入坑swiftUI1.0由于苹果推出了新的UI框架,swiftUI作为新时代的新框架,也大大推进了苹果开发的效率,当然由于是新的UI框架,现在还有很多不如意的东方,首先就是国内的相关资源太少了,还有就是针对macOS的支持控件也是少的可怜,苹果直到macOS11.0版本才推出官方可支持的树形结构控件outline Group,真是悲哀,对于想兼容10.15版本的开发者来说简直是痛苦万分,只能走自定义之路原创 2021-07-31 11:12:54 · 532 阅读 · 0 评论 -
swiftUI列表item点击空白地方点击功能失效的问题备忘
通过button包裹整个item的布局的形式去设置item的点击功能的时候,在item布局存在空白用spacer()撑开的时候,点击空白的地方点击的action会失效,解决这个问题的办法是在item的布局中添加一个背景,这样才能使点击的空白的地方也能触发点击事件。...原创 2021-05-12 16:26:21 · 589 阅读 · 0 评论 -
SwiftUI list执行操作再跳转
在swiftUI 中,我们知道可以通过navigationView来管理页面,通过NavigationLink跳转界面,如果想在跳转界面之前做相应的操作的话,可以用如下方法:struct OneView: View{@State var tag: Int? = nilvar body: some View{ NavigationView{ VStack{ NavigationLink(destination: TestView(),tag: 1,se原创 2021-04-02 10:11:30 · 594 阅读 · 0 评论 -
swiftUI从TabView跳转到子页面不通过返回键返回的方法
由于项目中常用到从首页点击一个按钮进入到子view,然后子view不通过点击返回按钮返回首页,常见的业务包含由个人中心点击登录按钮进入登录页面,登录完之后自动进入首页。在首页是TabView的情况下,通过子view修改navigationLink的isActive属性是无法返回到tabView首页的,这种返回方式只适合在非TabView页面跳转情况下有效,isActive的方式就不多介绍了。只需要在SeceneDelegate中写一个方法 func reloadMain(){ i原创 2020-12-25 17:42:55 · 616 阅读 · 0 评论 -
swift获取Mac插入U盘的可用容量
由于项目中要用到读取插入U盘的可用容量,并往里面写数据,所以记录一下获取可用容量的方法。 var filesystemFreeSize: Int64? { return try? FileManager.default.attributesOfFileSystem(forPath: path)[.systemFreeSize] as? Int64 }path为用户点击授权之后的路径。m...原创 2020-12-01 18:09:08 · 212 阅读 · 0 评论