gpt4 book ai didi

swiftui - UIImageView 代表不调整大小

转载 作者:行者123 更新时间:2023-12-02 18:08:51 24 4
gpt4 key购买 nike

我找不到一种方法来使包裹在 UIViewRepresentable 中的 UIImageView 的大小适合框架。无论我使用什么内容模式、剪辑或显式框架,它总是会调整到屏幕之外。 (图像尺寸远大于设备屏幕框架)

澄清一下:我需要使用 UIImageView,因为我必须进行一些 subview 定位以及其他各种原因。

这是一个配对的示例:

struct ImageView: UIViewRepresentable {

var image: UIImage

func makeUIView(context: Context) -> some UIView {

let imageView = UIImageView()
imageView.image = image
imageView.backgroundColor = .red
imageView.contentMode = .scaleAspectFit
imageView.clipsToBounds = true
imageView.frame = CGRect(x: 0, y: 0, width: 300, height: 400)

return imageView
}

func updateUIView(_ uiView: UIViewType, context: Context) {
}

}

这就是我尝试实现它的方式

struct ContentView: View {
var body: some View {
ImageView(image: UIImage(named: "full-ux-bg-image")!)
//.frame(width: 300, height: 400, alignment: .center) //This is just a test of explicit sizing
.padding()
}
}

关于如何使这项工作有任何想法吗?我希望它不超过 SwiftUI View 即可适应。

最佳答案

它有内容拥抱/压缩的默认约束,为了有可能在外部使用 View 进行操作,我们需要降低这些(......并且从不设置可表示的框架,以防万一)

这是固定变体(使用 Xcode 14/iOS 16 测试)

func makeUIView(context: Context) -> some UIView {

let imageView = UIImageView()
imageView.image = image
imageView.backgroundColor = .red
imageView.contentMode = .scaleAspectFit
imageView.clipsToBounds = true

imageView.setContentHuggingPriority(.defaultLow, for: .vertical)
imageView.setContentHuggingPriority(.defaultLow, for: .horizontal)
imageView.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
imageView.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)

return imageView
}

关于swiftui - UIImageView 代表不调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72732026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com