ios - 在 TableViewCell 中设置纵横比的多个圆形 UIImageView 的自动布局

标签 ios swift uiimageview autolayout

我有一个带有五个 imageView 的 tableViewCell。我希望五个 imageViews 具有相同的宽度和高度。如果我将每个 ImageView 的宽度和高度设置为 60,并将它们放在单元格中水平和垂直居中的堆栈 View 中,则 ImageView 会在 iPhone X 上正确显示。但是,在 iPhone SE 上图像太大

这是它在 X 上的显示方式。

iPhone X

这是它在 SE 上的显示方式。您可以看到两个外部图像在屏幕边缘被截断。

iPhone SE

为了尝试解决这个问题,我将我的自动布局更新为以下配置。我删除了锁定的 60x60 宽度/高度,而是添加了 1:1 的纵横比。希望圆形 imageViews 可以随着每个不同的屏幕尺寸进行缩放。 Auto Layout

它在 SE 上运行良好,但在 X 上 imageView 变得扭曲并且不再是完美的圆形。下面是 X 在这些自动布局约束下的样子。这是我使 imageView 循环的代码。

imageView.layer.cornerRadius = imageView.bounds.size.width / 2
imageView.clipsToBounds = true

iPhone X updated auto layout

如果我删除此代码,此 imageViews 将按比例显示。我不明白为什么我的 imageViews 没有显示完美的圆圈。有谁知道如何更新我的约束和/或代码来实现这一点?

iPhone X Square

最佳答案

设置 cornerRadius 的代码需要在 Auto Layout 设置 View 大小之后进行。确保发生这种情况的一种简单方法是子类化 UIImageView 并将设置 cornerRadius 的代码放在 layoutSubviews() 的重写中:

class RoundImageView: UIImageView {

    override func layoutSubviews() {
        super.layoutSubviews()
        self.layer.cornerRadius = self.bounds.size.width / 2
        self.clipsToBounds = true
    }

}

然后,只需在 Identity Inspector 中将 UIImageViewClass 更改为 RoundImageView 即可工作。

关于ios - 在 TableViewCell 中设置纵横比的多个圆形 UIImageView 的自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842163/

相关文章:

ios - 如何使用 SCNCamera 跟随 SCNNode 但不旋转?

swift - 第一次打开应用程序时在 UserDefaults 中保存日期

ios - 如何在点击 tableViewCell 时将 UIImageView 置于前台?

swift - ImageView 和按钮未出现在模拟器中

swift - 在自定义 UICollectionViewCell 中向 UIImageView 添加叠加层

c# - Xamarin iOS 错误 : Can not resolve reference

ios - 为了便于搜索,在解析中存储数据的最佳方式是什么?

ios - 具有演示样式 formSheet 的模态 UIViewController 在 iPhone XS Max 和 iPhone XR 上显示不正确

swift - 在运行时检查协议(protocol)继承

ios - 如何将此游戏代码转换为 Swift 4?