SwiftUI中没有公共API可以响应View协议的可调整大小的修饰符。 SwiftUI中只有Image可以与.resizable()一起使用。像UIView for GIF这样的自定义UIView现在无法调整大小。
我使用SDWebImageSwiftUI AnimatedImage,它支持UIKit视图SDAnimatedImageView。 AnimatedImage无法响应.resizable()、. scaleToFit,.aspectRatio(contentMode:.fit)等。WebImage支持SwiftUI Image,因此工作正常。
import SwiftUI
import SDWebImageSwiftUI
struct ContentView: View {
let url = URL(string: "https://media.giphy.com/media/H62DGtBRwgbrxWXh6t/giphy.gif")!
var body: some View {
VStack {
AnimatedImage(url: url)
.scaledToFit()
.frame(width: 100, height: 100)
WebImage(url: url)
.scaledToFit()
.frame(width: 100, height: 100)
}
}
}
不确定这是否是Apple错误。期望像SDWebImageSwiftUI AnimatedImage这样的自定义视图能够响应SwiftUI大小相关的修饰符,例如.scaledToFit()。
相关问题:https://github.com/SDWebImage/SDWebImageSwiftUI/issues/3
答案 0 :(得分:4)
SwiftUI使用抗压缩优先级和内容包含优先级来确定可能的大小调整。
如果要将视图的大小调整到其固有内容大小以下,则需要降低抗压缩性优先级。
示例:
func makeUIView(context: Context) -> UIView {
let imageView = UIImageView(image: UIImage(named: "yourImage")!)
imageView.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
imageView.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
return imageView
}
这将使您可以将.frame(width:height:)
设置为所需的任何大小。
答案 1 :(得分:0)
最后找到了解决方案。
在SDAnimationImageView或UIImageView外部制作一个UIView包装器,然后重写layoutSubviews()设置子视图的框架。
这是我的完整代码。
SDWebImageSwiftUI还发布了一个新版本,该版本使用包装器解决了此问题。
SELECT * FROM your_table_name
WHERE name LIKE '%a%'
OR note LIKE '%a%'