gpt4 book ai didi

ios - 如何使用自动布局使圆形 imageView 保持圆形?

转载 作者:IT王子 更新时间:2023-10-29 05:01:09 25 4
gpt4 key购买 nike

如何在不设置宽度和高度限制的情况下将矩形 ImageView 转换为可以在自动布局中保持形状的圆形 ImageView ?从而允许 imageView 定义它的大小,以及相对于它周围的对象的大小,以及前导、尾随、顶部和底部约束。

前几天我问了一个类似的问题,但我认为这可能会以更简洁的方式提出。非常感谢!

编辑

好的,我重新开始,让这个尽可能简单。我在单元格中有一个名为“Cell”的 View 和一个名为“dog”的 UIImageView,仅此而已。我在控制台中不再有“无法同时满足约束”,只有两个使用自动布局的简单 View 。我仍在尝试使用此代码来舍入 UIImageView:

profileImageView.layer.cornerRadius = profileImageView.frame.size.width / 2
profileImageView.clipsToBounds = true

这里是单元约束设置:

screenshot 1

这是配置文件图片约束设置:

screenshot 2

这是没有代码的结果,没有四舍五入,但很好,很正方形:

screenshot 3

这是四舍五入代码的结果:

screenshot 4

这对我来说毫无意义,因为没有舍入代码图像是方形的,而有代码它是菱形的。如果它是方形的,它不应该是一个没有问题的圆圈吗?

编辑 2

下面是当我移除底部约束并添加 0.637 的乘数以获得与 superview 相同的高度时发生的情况。

screenshot 5

最佳答案

不幸的是,你不能使用 cornerRadius 和自动布局来做到这一点——CGLayer 不受自动布局的影响,所以 View 大小的任何变化都不会改变半径已设置一次,正如您所注意到的,圆失去了它的形状。

您可以创建 UIImageView 的自定义子类并覆盖 layoutSubviews,以便在每次 imageview 的边界发生变化时设置 cornerRadius

编辑

一个例子可能看起来像这样:

class Foo: UIImageView {
override func layoutSubviews() {
super.layoutSubviews()

let radius: CGFloat = self.bounds.size.width / 2.0

self.layer.cornerRadius = radius
}
}

显然,您必须将 Foobar 实例的宽度限制为与高度相同(以保持圆形)。您可能还想将 Foobar 实例的 contentMode 设置为 UIViewContentMode.ScaleAspectFill 以便它知道如何绘制图像(这意味着图片可能会被裁剪)。

关于ios - 如何使用自动布局使圆形 imageView 保持圆形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32362934/

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