如何使用SwiftUI创建正方形项目的网格(例如在iOS照片库中)?
我尝试了这种方法,但是不起作用:
var body: some View {
List(cellModels) { _ in
Color.orange.frame(width: 100, height: 100)
}
}
Run Code Online (Sandbox Code Playgroud)
列表仍然具有UITableView样式:
从iOS / iPadOS 13开始,提供了深色用户界面样式,类似于macOS Mojave中引入的深色模式。如何检查用户是否已启用系统范围的暗模式?
在哪里可以找到初始化程序中可用的所有系统映像Image(systemName:)?
我只使用了"chevron"和"star.fill"到目前为止,在苹果公司的SwiftUI系列教程发现。但是,我在任何官方文档中都找不到完整的图标列表。
在iOS 13 beta 6上使用Xcode 11 beta 5运行该应用程序时,在显示搜索结果视图控制器时遇到了奇怪的差距:
这是如何设置的:
let searchResultsController = BLSearchResultsController()
let ret = UISearchController(searchResultsController: searchResultsController)
ret.searchResultsUpdater = self
ret.delegate = self
ret.searchBar.delegate = self;
ret.searchBar.autocapitalizationType = .none
ret.searchBar.placeholder = NSLocalizedString("SearchMsg", comment: "")
ret.searchBar.enablesReturnKeyAutomatically = true
if #available(iOS 13.0, *) {
ret.searchBar.showsScopeBar = false
ret.searchBar.backgroundColor = .white
let searchTextField = ret.searchBar.searchTextField
searchTextField.font = UIFont.tuttiRegularFont(16)
searchTextField.accessibilityIdentifier = "Main Search Field"
if let searchImageView = searchTextField.leftView as? UIImageView {
searchImageView.image = UIImage(named: "home-search-icon")
}
}
Run Code Online (Sandbox Code Playgroud)
结果搜索控制器是正常的UITableViewController,仅添加到中navigationItem.searchController。没有精美的演示代码。当在最新的实时Xcode上构建并在iOS 11/12设备上运行时,不存在此问题,这使我相信一些潜在的iOS …
如果我已将可取消集存储到 ViewController 中:
private var bag = Set<AnyCancellable>()
Run Code Online (Sandbox Code Playgroud)
其中包含多个订阅。
1 - 我应该在 deinit 中取消订阅吗?或者它会自动完成工作?
2 - 如果是这样,我如何取消所有存储的订阅?
bag.removeAll() is enough?
Run Code Online (Sandbox Code Playgroud)
还是我应该遍历集合并一一取消所有订阅?
for sub in bag {
sub.cancel()
}
Run Code Online (Sandbox Code Playgroud)
Apple 表示订阅一直有效,直到存储的 AnyCancellable 在内存中。所以我想解除分配可取消的bag.removeAll()应该足够了,不是吗?
我正在 SwiftUI 中处理相对复杂的动画,并且想知道链接各种动画阶段的最佳/最优雅的方式是什么。
假设我有一个视图,它首先需要缩放,然后等待几秒钟然后消失(然后等待几秒钟并重新开始 - 无限期)。
如果我尝试在同一个视图/堆栈上使用多个 withAnimation() 块,它们最终会相互干扰并弄乱动画。
到目前为止我能想到的最好的方法是在初始视图 .onAppear() 修饰符上调用一个自定义函数,在该函数中,为动画的每个阶段使用 withAnimation() 块,它们之间有延迟。所以,它基本上看起来像这样:
func doAnimations() {
withAnimation(...)
DispatchQueue.main.asyncAfter(...)
withAnimation(...)
DispatchQueue.main.asyncAfter(...)
withAnimation(...)
...
}
Run Code Online (Sandbox Code Playgroud)
它最终很长而且不是很“漂亮”。我确信必须有更好/更好的方法来做到这一点,但到目前为止我尝试的一切都没有给我我想要的确切流程。
任何想法/建议/提示将不胜感激。谢谢!
我有一个基于某种状态的 swiftUI 动画:
withAnimation(.linear(duration: 0.1)) {
self.someState = newState
}
Run Code Online (Sandbox Code Playgroud)
当上述动画完成时是否有任何回调被触发?
如果有关于如何在 SwiftUI 中使用完成块完成动画而不是 的任何建议withAnimation,我也愿意接受这些建议。
我想知道动画何时完成,以便我可以做其他事情,就本示例而言,我只想在动画完成时打印到控制台。
这是 iOS 13 Health 应用程序的屏幕截图 - 用户个人资料。我最近开始使用swiftui并想知道如何开发如下所示的屏幕。我尝试了简单和分组的列表样式。但我无法看到下面的布局。
这样的 UI 可以纯粹使用swiftui-list 开发吗?
我将密码存储到iOS钥匙串中,以后再检索它们以在我的应用程序中实现“记住我”(自动登录)功能。
我围绕Security.framework功能(SecItemCopyMatching(),等等)实现了自己的包装器,直到iOS 12为止,它的运行都像是一种魅力。
现在,我正在测试我的应用程序不会与即将推出的iOS 13兼容,瞧瞧:
SecItemCopyMatching() 总是回来 .errSecItemNotFound
...即使我以前已经存储了要查询的数据。
我的包装是用静态特性方便地提供的价值类kSecAttrService和kSecAttrAccount组装查询字典时:
class LocalCredentialStore {
private static let serviceName: String = {
guard let name = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String else {
return "Unknown App"
}
return name
}()
private static let accountName = "Login Password"
// ...
Run Code Online (Sandbox Code Playgroud)
我将使用以下代码将密码插入钥匙串:
/*
- NOTE: protectWithPasscode is currently always FALSE, so the password
can later be retrieved programmatically, i.e. without user interaction.
*/ …Run Code Online (Sandbox Code Playgroud) 当iOS 13上的响应过大(14kb)时,我们将面临以下网络错误。
[-1103] Error Domain=NSURLErrorDomain Code=-1103 "resource exceeds maximum size"
当我们使用Alamofire时,此问题被视为错误结果,这破坏了我们对结果的处理。
奇怪的是,如果我们直接使用NSURLSession,尽管从日志记录中仍然可以看到此错误,但实际上我们并没有在
session.dataTask(with: request) { value, response, error in ... }
Run Code Online (Sandbox Code Playgroud)
因此,结果可以正确处理。
这个问题从未见过。有人对此有想法吗?
ios13 ×10
ios ×6
swiftui ×6
swift ×5
animation ×2
combine ×1
ios-darkmode ×1
ipados ×1
keychain ×1
objective-c ×1
sf-symbols ×1
swiftui-list ×1
xcode ×1
xcode11 ×1