I have an UIview
that on top of itself has an UIImageView
. I want both to be rounded so I wrote these lines of code:
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
}
On paper everything should work fine, but it isn't. While UIView
becomes rounded, UIImageView
isn't shown at all. Further investigation showed that self.avatarPlaceholderView.frame.width
returns proper width, but self.avatarImageView.frame.width
returns width of 1000. What is even more strange if I comment last 2 lines, UIImageView
will be visible, so constraints are set properly.
I have no idea why this is happening.
EDIT
Storyboard screen shots:
Exact same thing happened to me as well. Had a UIImageView
that was being converted to a circle post awakeFromNib
via:
self.iv.layer.masksToBounds = true;
self.iv.layer.cornerRadius = self.iv.frame.width/2;
Found the root cause and you're not going to like it - XCode 8 (surprise surprise).
With absolutely no changes made the .xib
that contained my imageview the corner radius modification worked fine. However, as soon as I opened this .xib
file in XCode 8 (without changing anything), the image view circle modification no longer worked. This was because, as you noticed, the imageview's width was being detected as 1000 instead of the constant width constraint I had set to (32).
As you probably know xcode changes .xib
entries almost every time you open one, even if no modifications are performed. A lot of these are trivial IDE version tags but occasionally as with changes between major IDE version they alter non-trivial properties of the .xib
for "compatibility" purposes.
Workaroud: until Apple fixes this...
.xib
file and perform any changes you need..xib
. Do so and do not open the file again without performing these steps after each change