SwiftUI 中没有公共 API 来响应 View 协议的可调整大小修饰符。只有 SwiftUI 中的 Image 可以与 .ressized() 一起使用。自定义 UIView(如 GIF 的 UIView)现在无法调整大小。
我使用 SDWebImageSwiftUI AnimatedImage,它支持 UIKit View SDAnimatedImageView。 AnimatedImage 不响应 .ressized()、.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)
}
}
}
不确定这是否是苹果的一个错误。期望像 SDWebImageSwiftUI AnimatedImage 这样的自定义视图能够响应 SwiftUI 大小相关的修饰符,例如 .scaledToFit()。
相关问题:https://github.com/SDWebImage/SDWebImageSwiftUI/issues/3
SwiftUI 使用压缩阻力优先级和内容拥抱优先级来决定可以调整的大小。
如果要将视图大小调整为低于其固有内容大小,则需要降低压缩阻力优先级。
Example:
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:)
到您想要的任何尺寸。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)