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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
不知道是不是苹果的bug。期望像 SDWebImageSwiftUI AnimatedImage 这样的自定义视图响应 SwiftUI 大小相关的修饰符,如 .scaledToFit()。
相关问题:https : //github.com/SDWebImage/SDWebImageSwiftUI/issues/3
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
}
Run Code Online (Sandbox Code Playgroud)
这将允许您设置.frame(width:height:)为您想要的任何大小。
| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |