目录
知识点补给站
- 【Swift学习】关于 Swift | Swift 编程语言中文教程(The Swift Programming Language)
- 【SwiftUI学习】不要惊慌! SwiftUI Example
- 【SwiftUI学习】https://goswiftui.com
- 【AppIcon生成工具】App Icon Generator
1. 设置App的图标
首先准备一张1024*1024像素的图标,然后打开网站:App Icon Generator
下载下来之后在压缩包里找到AppIcon.appiconset文件夹,替换项目当中的AppIcon即可
2. SwiftUI中的Image控件使用系统图标
要使用系统当中的图标首先是要知道图标的名字,想要找到图标中的名字,需要去App Store下载symbols explorer,如图:
下载打开之后点开其中一个图标即可copy图标名称
接着直接在代码中使用即可:
Image(systemName: "square.and.arrow.up.fill")
3、修改app名称
如果没有找到这个选项,需要手动添加下,如图:
4、swift ui中软键盘弹出时将底部视图往上顶的问题
在你的布局中加入一下代码即可。
.ignoresSafeArea(.keyboard, edges: .bottom)
如果你是swift ui和UIKit混用,那么需要添加到自定义视图的位置,比如下面的HomeTabBarView是使用UIKit实现的:
5、swift ui中软键盘的关闭问题
新建AnyGestureRecognizer.swift
class AnyGestureRecognizer: UIGestureRecognizer {
// 当用户开始触摸屏幕时调用
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
// 如果触摸的视图是UIControl控件(比如按钮等)
if let touchedView = touches.first?.view, touchedView is UIControl {
// 取消这个手势,因为我们不希望打断控件的正常操作
state = .cancelled
// 如果触摸的视图是可编辑的UITextView(比如文本输入框)
} else if let touchedView = touches.first?.view as? UITextView, touchedView.isEditable {
// 同样取消这个手势,不想干扰文本输入
state = .cancelled
// 如果以上情况都不是,那就开始手势识别
} else {
state = .began
}
}
// 当触摸结束时调用
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
// 标记手势为结束状态
state = .ended
}
// 当触摸被取消(比如来电或者中断)时调用
override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent) {
// 取消这个手势
state = .cancelled
}
}
在SceneDelegate.swift 中添加以下代码
1、SceneDelegate实现UIGestureRecognizerDelegate
2、重写gestureRecognizer
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
// 返回 true 表示允许多个手势同时识别
return true
}
3、在scene方法中添加以下代码
// 创建一个自定义手势识别器,设置成:当用户在 window 上点击时,调用结束编辑的方法(相当于关闭键盘)
let tapGesture = AnyGestureRecognizer(target: window, action: #selector(UIView.endEditing))
// 设置手势识别器不需要独占触摸,也就是说,用户在触摸屏幕时,手势识别器不会阻止其他手势(可以同时触发多个手势)
tapGesture.requiresExclusiveTouchType = false
// 设置手势识别器不取消其他触摸事件,也就是说,手势被识别时,触摸还能继续传递给其他界面上的控件(不影响按钮点击等操作)
tapGesture.cancelsTouchesInView = false
// 把当前类设置为手势的代理,方便后面管理手势行为
tapGesture.delegate = self
// 把这个手势识别器添加到 window 上,也就是让它开始监听手势事件
window?.addGestureRecognizer(tapGesture)
参考:https://stackoverflow.com/questions/56491386/how-to-hide-keyboard-when-using-swiftui