swift 在选取器视图中选择项目时是否移除图像或调整图像大小?

c9qzyr3d  于 2023-09-30  发布在  Swift
关注(0)|答案(1)|浏览(128)

有没有办法在选择器视图中从标签中删除图像或调整图像大小?

  1. Picker("", selection: $selectedCategory) {
  2. ForEach(categorySM.categories, id: \.self) { category in
  3. HStack {
  4. if let inputImage = UIImage(data: category.image ?? Data()) {
  5. Image(uiImage: inputImage)
  6. .resizable()
  7. .scaledToFit()
  8. }
  9. Text(category.name ?? "")
  10. }
  11. .tag(category as CategoryItem?)
  12. }
  13. }
  14. .font(.callout)
  15. .pickerStyle(.menu)

正如你在下面的图片1和2中看到的,来自Beverages类别的标签中的图片很大,几乎覆盖了整个屏幕,它还覆盖了类别名称(Bestrom)。在标签上显示图像时,是否有方法删除图像或调整图像大小?让它看起来像图片#3。

lfapxunr

lfapxunr1#

奇怪的是,在转换为Image视图之前调整UIImage的大小解决了这个问题。

  1. if let inputImage = UIImage(data: category.image ?? Data()) {
  2. let resizeImage = inputImage.scalePreservingAspectRatio(targetSize: CGSize(width: 25, height: 25))
  3. Image(uiImage: resizeImage)
  4. .resizable()
  5. .scaledToFit()
  6. }

编码为UIImage

  1. extension UIImage {
  2. func scalePreservingAspectRatio(targetSize: CGSize) -> UIImage {
  3. // Determine the scale factor that preserves aspect ratio
  4. let widthRatio = targetSize.width / size.width
  5. let heightRatio = targetSize.height / size.height
  6. let scaleFactor = min(widthRatio, heightRatio)
  7. // Compute the new image size that preserves aspect ratio
  8. let scaledImageSize = CGSize(
  9. width: size.width * scaleFactor,
  10. height: size.height * scaleFactor
  11. )
  12. // Draw and return the resized UIImage
  13. let renderer = UIGraphicsImageRenderer(
  14. size: scaledImageSize
  15. )
  16. let scaledImage = renderer.image { _ in
  17. self.draw(in: CGRect(
  18. origin: .zero,
  19. size: scaledImageSize
  20. ))
  21. }
  22. return scaledImage
  23. }
  24. }
展开查看全部

相关问题