我是 SwiftUI 新手,正在研究如何从 URL 下载图像。我发现在 iOS15 中你可以使用 AsyncImage 来处理图像的所有阶段。代码如下所示。
AsyncImage(url: URL(string: urlString)) { phase in
switch phase {
case .success(let image):
image
.someModifers
case .empty:
Image(systemName: "Placeholder Image")
.someModifers
case .failure(_):
Image(systemName: "Error Image")
.someModifers
@unknown default:
Image(systemName: "Placeholder Image")
.someModifers
}
}
Run Code Online (Sandbox Code Playgroud)
我会启动我的应用程序,每次我在列表上上下滚动时,它都会再次下载图像。那么我怎样才能添加缓存呢?我试图像在 Swift 中那样添加缓存。像这样的东西。
struct DummyStruct {
var imageCache = NSCache<NSString, UIImage>()
func downloadImageFromURLString(_ urlString: String) {
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { data, response, error in
if let _ = …Run Code Online (Sandbox Code Playgroud) 我想知道如何将 @FocusState 传递给另一个视图。这是一些示例代码。
struct View1: View {
enum Field {
case username, password
}
@State var passwordText: String = ""
@FocusState var focusedField: Field?
var body: some View {
// How would I be able to pass the focusedField here?
View2(text: $passwordText, placeholder: "Password")
//TextField("Password", text: $passwordText)
//.frame(minHeight: 44)
//.padding(.leading, 8)
//.focused($focusedField, equals: .password)
// How would I be able to add the commented code above to View2
}
}
struct View2: View {
@Binding var text: String
let placeholder: …Run Code Online (Sandbox Code Playgroud) 好吧,我想知道为什么我的预览在更新 Xcode 后不起作用。所以我有一个看起来像这样的枚举。
enum Field {
case email
case securedPassword
case unsecuredPassword
}
Run Code Online (Sandbox Code Playgroud)
现在,当我将 @FocusState 添加到 TestView 时,我的预览会崩溃并且不会更新。这是我的代码的样子。
struct TestView1: View {
@FocusState var focusedField: Field?
var body: some View {
Color.blue
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我注释掉 @FocusState 时,我可以将颜色更改为红色,并且预览会更新。当 @FocusState 未注释掉时,当我将颜色更改为新颜色时,它不会更新预览并给我带来奇怪的崩溃。
现在这是一个错误吗?如果是,有解决办法吗?
所以我正在尝试创建一个自定义图像选择器,类似于 Instagram,但更基本。这就是我使用它创建屏幕的方法。
struct NewPostScreen: View {
@StateObject var manager = SelectNewPostScreenManager()
let columns = [GridItem(.flexible(), spacing: 1), GridItem(.flexible(), spacing: 1), GridItem(.flexible(), spacing: 1)]
var body: some View {
ScrollView {
VStack(spacing: 1) {
Image(uiImage: manager.selectedPhoto?.uiImage ?? UIImage(named: "placeholder-image")!)
.resizable()
.scaledToFit()
.frame(width: 350, height: 350)
.id(1)
LazyVGrid(columns: columns, spacing: 1) {
ForEach(manager.allPhotos) { photo in
Image(uiImage: photo.uiImage)
.resizable()
.scaledToFill()
.frame(maxWidth: UIScreen.main.bounds.width/3, minHeight: UIScreen.main.bounds.width/3, maxHeight: UIScreen.main.bounds.width/3)
.clipped()
.onTapGesture {
manager.selectedPhoto = photo
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
用户界面看起来不错,一切都很好,但有时当我使用 TapGesture 单击图像时,它会为我的经理提供错误的 …
好吧,我在使用tableview创建动态单元格时遇到问题.我的图片崩溃了,看起来像这样.它在描述很长时工作正常,但在短时间工作时效果不佳.
图像约束为:width = 120,height = 160,top = 8,leading = 12.
标题约束是:top = 8,导致imageView = 8,尾随= 12.
描述约束是:top到titleLabel = 5,导致imageView = 8,trailing = 12,bottom = 12

现在,我没有将底部约束添加到描述中,而是将其添加到图像中,然后单元格看起来像这样.
现在描述不合适,在中间,它应该在标题标签下面.
真的很感激帮助.