我有一个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
将是可见的,那么更奇怪的是,因此约束设置正确
我不知道为什么会这样。
修改
故事板截屏:
答案 0 :(得分:2)
确保在更改self.avatarPlaceholderView.layoutIfNeeded()
属性时运行frame/bounds
,并将其布局为新的frame/bounds
。
答案 1 :(得分:2)
同样的事情也发生在我身上。通过以下方式将UIImageView
转换为圈awakeFromNib
self.iv.layer.masksToBounds = true;
self.iv.layer.cornerRadius = self.iv.frame.width/2;
找到了根本原因,你不会喜欢它 - XCode 8 (惊喜)。
绝对没有更改包含我的imageview的.xib
,角半径修改工作正常。但是,只要我在XCode 8中打开此.xib
文件(不更改任何内容),图像视图圈修改就不再有效。这是因为,正如您所注意到的,图像视图的宽度被检测为1000而不是我设置为(32)的恒定宽度约束。
您可能知道xcode几乎每次打开时都会更改.xib
个条目,即使没有执行任何修改也是如此。其中很多都是简单的IDE版本标签,但偶尔与主要IDE版本之间的更改一样,为了“兼容性”的目的,它们会改变.xib
的非平凡属性。
Workaroud:,直到Apple修复此问题......
.xib
文件并执行所需的任何更改。.xib
。这样做并且不会在每次更改后执行这些步骤时再次打开文件