使用该.searchable(text: $text)功能时,搜索时搜索栏中会出现取消按钮。
单击取消按钮时有什么方法可以执行操作吗?我想在单击“取消”时调用一个函数,但无法弄清楚如何在点击“取消”时执行操作。
苹果文档没有提及任何相关内容。回到 UIKit 中,就有了func searchBarCancelButtonClicked(searchBar: UISearchBar) {这样做的方法。
我使用 iOS15 的 SwiftUI 可搜索修饰符通过 onSubmit 修饰符进行搜索以发送 HTTP 请求,并且我还想在用户点击“取消”按钮时重置初始列表;如果我找到了 onCancel 修饰符,我将不胜感激。有人卖过这个吗?
UITableView显示没有节页脚的多个节,节之间有额外的空间。Xcode 的视图调试器显示它不是视图,而只是一个空白区域。
就我而言,这种行为是不受欢迎的。
添加 1.0/0.0 高度页脚并没有帮助。更改表视图的style.
这是示例代码:
import UIKit
final class ViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.separatorColor = .yellow
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = UIView()
header.backgroundColor = .green
return header
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 20.0
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) …Run Code Online (Sandbox Code Playgroud) 使用Swift5.5、iOS15.0.1、
从 iOS15 开始,我意识到与我现有的 URL 扩展相关的一些弃用行为正在发生。
我没有找到任何关于如何重写现有扩展的好的文档。
这是我当前的实现,大约是。16个折旧警告,我不知道如何使用iOS15规避。对此的任何想法都受到高度赞赏!
extension URL {
func mimeType() -> String {
let pathExtension = self.pathExtension
if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as NSString, nil)?.takeRetainedValue() {
if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() {
return mimetype as String
}
}
return "application/octet-stream"
}
var containsImage: Bool {
let mimeType = self.mimeType()
guard let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType as CFString, nil)?.takeRetainedValue() else {
return false
}
return UTTypeConformsTo(uti, kUTTypeImage)
}
var containsAudio: Bool {
let mimeType = self.mimeType() …Run Code Online (Sandbox Code Playgroud) 自从将我的 iPhone 升级到 iOS 15 并在 Mac 上升级到 Xcode 13 后,我在使用 Xcode 测试/调试任何 SwiftUI 应用程序时遇到了问题。即使是带有简单“hello world”示例的新 Xcode 项目,在按下 Xcode“开始”按钮时也会以这种方式运行(无论目标是模拟器还是装有 iOS 15 的物理 iPhone)。
应用程序似乎已正确上传到目标,但目标在显示应用程序屏幕之前显示空白屏幕超过一分钟(分钟)。
当 Xcode 调试器断开连接并在目标(无论是模拟器还是物理 iPhone)上手动启动应用程序时,它似乎工作正常(首先不会出现任何白屏)。
我的所有 SwiftUI 应用程序(以及简单的 Xcode Swift“Hello World”示例)都有相同的行为,这些应用程序已经工作了很长时间,没有任何问题。
我仍然安装了 Xcode 12.5,它现在表现出相同的行为(即使目标操作系统是 iOS 14.5),并且应用程序已上传到我的 iOS 15 iPhone。
基本上不可能测试和调试存在此问题的应用程序。
有没有其他人有这个问题?
有什么已知的解决方案或建议吗?
谢谢!
我在使用该方法时遇到了麻烦,它似乎在iOS 15setNavigationBarHidden上无法正常工作。
我目前正在使用这个结构:
ViewController, 需要navigationBarViewController,当我点击 a 时从上一个推送UIButton,这不需要navigationBar 在以前版本的iOS上,我只是调用setNavigationBarHidden(true, animated: true)了viewWillAppear第二个方法ViewController,一切都按预期工作,但从新版本的 iOS 来看,这不会正确发生。
现在navigationBar不能正确隐藏,我必须实现我想要的行为的唯一方法是使用navigationBar.isHidden = true,不幸的是,这导致我在两个控制器之间出现草率且不那么流畅的动画。
我该如何解决这个问题?
iOS 15 添加了新功能,UIKeyboardLayoutGuide能够对需要与键盘做出反应的视图施加约束。
这在单个视图中效果很好,但是当您在视图 A中设置约束并将视图 B推入堆栈时,键盘布局指南突然变为CGRect.zero(在视图 A中)的大小。
当返回到视图A时,键盘布局引导框架是静止的,因此键盘布局引导顶部和“SomeView”.bottom.zero之间的约束例如被打破。
为了展示这个问题,我向跟踪控制器添加了一个绿色视图,并向键盘布局指南顶部锚点添加了底部约束,如下所示:
let kbView = UIView()
kbView.backgroundColor = .green
kbView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(kbView)
kbView.widthAnchor.constraint(equalToConstant: 200).isActive = true
kbView.heightAnchor.constraint(equalToConstant: 100).isActive = true
kbView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
kbView.bottomAnchor.constraint(equalTo: self.view.keyboardLayoutGuide.topAnchor).isActive = true
Run Code Online (Sandbox Code Playgroud)
您可以在 Github 上的以下链接中找到整个项目。
我们如何解决这个问题?其他人也遇到过这个问题吗?
我当前的解决方法是编写自己的布局指南,该指南可以正常工作,并且与 iOS < 15 兼容。
真的,这不可能是真的(?!),因为这是一个新的、闪亮的功能……
也许我忽略了一些东西……
无论如何:这是展示该问题的演示项目。
对于我们的项目,我们需要使用最新的 Xcode 和 iOS 版本来构建和发布基础设施。Apple 于 2021 年 10 月最后一周发布了 Xcode 13.1 和 iOS 15.1,但没有用于运行测试的 iOS 15.1 目标(模拟器)。
知道它们通常什么时候出现在 Xcode 中吗?
在 iOS 15 的 Xcode 13 beta 中,我收到一条消息,称perform(_:inZoneWith:completionHandler:)(CloudKit) 在 iOS 15 中已弃用并重命名为fetchRecords(matching:inZoneWith:desiredKeys:resultsLimit:completionHandler:)“但是...”
Apple 文档网站未声明此方法已弃用:https://developer.apple.com/documentation/cloudkit/ckdatabase/1449127-perform
Apple 正在展示 iOS 15 的其他弃用(另一种方法):https://developer.apple.com/documentation/cloudkit/ckdatabase/3794331-records/
fetchRecords(matching:inZoneWith:desiredKeys:resultsLimit:completionHandler:)似乎不存在..还..( Value of type 'CKDatabase' has no member 'fetchRecords')
那么,这是否只是一个错误消息,因为它是测试版?我应该担心重写使用的函数perform(_:inZoneWith:completionHandler:)吗?
这是我的函数,我尝试将其改编为 fetchRecords,但它不存在。我尝试适应它,fetch(withQuery:completionHandler:但我有点迷失让它发挥作用..
(该函数只是从iCloud私有数据库中删除记录):
let container = CKContainer(identifier: "MyContainerNameHere")
let recordType = "DBName"
//delete all saved icloud records
let query = CKQuery(recordType: recordType, predicate: NSPredicate(value: true))
container.privateCloudDatabase.perform(query, inZoneWith: nil) { (rec, err) in
if let err = err {
print(err.localizedDescription) …Run Code Online (Sandbox Code Playgroud) 我对如何处理复杂的 Swift 数据类型、它们对变量的赋值以及访问其中的值有点困惑。希望有人能澄清以下问题:
当尝试从 SwiftUI 和 CloudKit 获取数据,并尝试重写 CK 函数以符合 async/await 时,我有以下代码行:
let result = try await container.privateCloudDatabase.records(matching: query)
现在这一行应该从云私有数据库中获取与指定查询匹配的所有记录并返回一些 CKRecords
旧函数的执行方式如下:
container.privateCloudDatabase.perform(query, inZoneWith: nil) { (rec, err) in
for record in rec {
print("Found this record: \(record)")
}
}
Run Code Online (Sandbox Code Playgroud)
这非常有效,因为perform(_:inZoneWith:)会返回一个 CKRecord 和一个错误,它们在语句中被“分开”(rec, err) in并传递到循环中进行迭代。
使用新的 async/await 方法,我尝试简单地等待并将变量分配给找到的所有记录,然后迭代返回的数据,挑选 CKRecords 并执行我想要的任何任务。
我感到困惑的是,当我尝试以多种方式从返回的结果中挑选数据时,我只是收到错误。我不完全理解如何描述返回值的数据结构,我认为这是问题的根本原因。
我尝试了一些方法并收到以下错误消息:
如果我尝试:
let (result, err) = try await container.privateCloudDatabase.records(matching: query)
Run Code Online (Sandbox Code Playgroud)
当我使用时(尝试将 CKRecords 附加到我之前创建的 CKRecords 数组中):
for record in result {
self.myCKRecordArray.append(record)
}
Run Code Online (Sandbox Code Playgroud)
错误消息具体指出: …