ios - viewDidLayoutSubviews中的UIImageView宽度是1000?

标签 ios swift uiimageview nslayoutconstraint

我有一个 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屏幕截图:

enter image description here enter image description here

最佳答案

同样的事情也发生在我身上。有一个 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 修复此问题...

  1. 打开 .xib 文件并执行所需的任何更改。
  2. 打开 Xcode 右侧的文件检查器选项卡
  3. Interface Builder Document部分下,选择“在 Xcode 7.x 中打开”
  4. 这将提示您保存并关闭 .xib。执行此操作后,每次更改后如果未执行这些步骤,请勿再次打开文件
  5. 再次运行您的应用。 1000 宽度和高度问题已修复!

关于ios - viewDidLayoutSubviews中的UIImageView宽度是1000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40073193/

相关文章:

IOS DidReceiveRemoteNotification 问题

iphone - 如何使用矩形裁剪图像?

iphone - 是否可以转换带有一些音符的音频文件?

swift - 如何通过segue将数据从容器 View Controller 传递到其他 Controller ?

ios - 当应用程序处于后台时处理本地通知

ios - 自发的 Swift 编译器错误

ios - 使用自动布局的 UICollectionView header 动态高度

swift - 当宽度为设备宽度且高度为原始图像的高度时,UIImageView 中的图像将被裁剪

objective-c - UITableViewCell 的 imageView 适合 40x40

ios - 如何跳过最顶层 View 的手势 - iOS