我有一个 UIview
,它本身之上有一个 UIImageView
。我希望两者都四舍五入,所以我编写了这些代码行:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// make rounded profile image
self.avatarPlaceholderView.layer.masksToBounds = true
self.avatarPlaceholderView.layer.cornerRadius = self.avatarPlaceholderView.frame.width / 2.0
self.avatarImageView.layer.masksToBounds = true
self.avatarImageView.layer.cornerRadius = self.avatarImageView.frame.width / 2.0
}
理论上一切都应该工作正常,但事实并非如此。虽然 UIView
变为圆形,但 UIImageView
根本不显示。进一步调查显示, self.avatarPlaceholderView.frame.width 返回正确的宽度,但 self.avatarImageView.frame.width 返回宽度 1000。如果我评论,更奇怪的是最后 2 行,UIImageView
将可见,因此约束设置正确。
我不知道为什么会发生这种情况。
编辑
Storyboard屏幕截图:
最佳答案
同样的事情也发生在我身上。有一个 UIImageView
正在通过 awakeFromNib
转换为圆形:
self.iv.layer.masksToBounds = true;
self.iv.layer.cornerRadius = self.iv.frame.width/2;
找到了根本原因,但你不会喜欢它 - XCode 8(惊喜)。
在包含我的 ImageView 的 .xib
绝对没有任何更改的情况下,角半径修改工作得很好。但是,当我在 XCode 8 中打开此 .xib
文件(不进行任何更改)时, ImageView 圆修改就不再起作用。这是因为,正如您所注意到的, ImageView 的宽度被检测为 1000,而不是我设置为 (32) 的恒定宽度约束。
正如您可能知道的那样,xcode 几乎每次打开 .xib
条目时都会更改它,即使没有执行任何修改。其中很多都是微不足道的 IDE 版本标记,但有时随着主要 IDE 版本之间的更改,它们会出于“兼容性”目的而更改 .xib
的重要属性。
解决方法:直到 Apple 修复此问题...
- 打开
.xib
文件并执行所需的任何更改。 - 打开 Xcode 右侧的文件检查器选项卡
- 在Interface Builder Document部分下,选择“在 Xcode 7.x 中打开”
- 这将提示您保存并关闭
.xib
。执行此操作后,每次更改后如果未执行这些步骤,请勿再次打开文件 - 再次运行您的应用。 1000 宽度和高度问题已修复!
关于ios - viewDidLayoutSubviews中的UIImageView宽度是1000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40073193/