Xcode Imageview Aspect Fit 删除多余空间

标签 xcode uitableview uiimageview tableview aspect-fit

我在 UITableViewCell 中有一个 ImageView 。

如果图像很大,具有 Aspect Fit 的 Imageview 会在顶部和底部创建大量额外空间。额外的空间(灰色背景色)如下图所示。

如何删除多余的空间?

Imageview Extra Space
一些注意事项:

  1. 此特定图像的尺寸为 890 x 589,屏幕截图是在 iPhone 6S 模拟器上拍摄的。

  2. 我正在使用 UITableViewAutomaticDimension 自动表格单元格高度。

  3. ImageView 没有高度限制,因此可以相应地调整大小。

提前谢谢您。

最佳答案

我也遇到了同样的问题。当原始图像尺寸(宽度和/或高度)大于容纳它的 UIImageView 并且使用 Aspect Fit 调整图像大小以适合 UIImageView 时,就会发生这种情况。

此处,图像宽度大于 UIImageView 的容纳范围,因此 Aspect Fit 会调整图像大小,同时保持原始宽高比。如果您读取图像大小(通过监视或断点或其他方式),您将看到图像大小为(例如)600(高)x 800(宽)(3:4 比例)。 UIImageView 宽度为(例如)320(w),因此显示的图像缩放为 240(h) x 320(w)(保持 3:4 比例)。但图像宽度实际上仍然是 600 x 800,并且由于 UIImageView 高度没有限制,UIImageView 大小为 600 x 320 --> 它将 UIImageView 高度设置为原始图像高度 (600),因为它可以。

我的解决方案是这样的:(Swift 3)

向 Main.storyboard 中的 UIImageView 添加高度约束,并通过 Outlet 链接它:

@IBOutlet weak var displayimage: UIImageView!
@IBOutlet weak var displayimageHeightConstraint: NSLayoutConstraint!

然后测试 UIImageView 是否比它所保存的图像小(宽度)。如果是这样,请设置高度约束,使 UIImageView 的高宽比与图像的长宽比相同:

if displayimage.frame.size.width < (displayimage.image?.size.width)! {
    displayimageHeightConstraint.constant = displayimage.frame.size.width / (displayimage.image?.size.width)! * (displayimage.image?.size.height)!
}

如果由于 UIImageView 高度有限且宽度设置为原始图像宽度的调整大小问题而导致图像两侧存在空白,则也可以进行互补操作。

@IBOutlet weak var displayimageWidthConstraint: NSLayoutConstraint!

if displayimage.frame.size.height < (displayimage.image?.size.height)! {
    displayimageWidthConstraint.constant = displayimage.frame.size.height / (displayimage.image?.size.height)! * (displayimage.image?.size.height)!
}

关于Xcode Imageview Aspect Fit 删除多余空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38477866/

相关文章:

ios - iOS 的 APNS 通知声音

ios - 当调用 textFieldDidEndEditing 时,应用程序卡住

iphone - 常规/组 UITableViewCell 中的字符数

ios - ios中图片的 ScrollView

objective-c - NSIndexPath 的内存管理问题

ios - 安装后将文件添加到 iOS 应用程序

ios - 如何将带有标签的图像保存到相册?

ios - UILabel 渲染到 UIImage

ios - 通过 React Native Firebase 存在 AdMob 时出现 “Linker command” 错误

objective-c - UIGestureRecognizer 阻止 tableview 滚动