1

我正在尝试制作一个基于自动布局具有自适应大小的圆形视图,目前我设置了约束,然后我尝试在 viewwilllayoutsubviews 方法中对图像进行舍入。

这导致形状奇特的非圆形视图,我该如何解决?

在里面:

    profilePic = UIImageView(frame: CGRect.zero)
    profilePic.clipsToBounds = true
    profilePic.contentMode = .scaleAspectFill

约束:

 profilePic.snp.makeConstraints { (make) -> Void in
                make.centerX.equalTo(self).multipliedBy(0.80)
                make.centerY.equalTo(self).multipliedBy(0.40)
                make.size.equalTo(self).multipliedBy(0.22)
            }

子视图:

override func viewWillLayoutSubviews() {
        self.navigationMenuView.profilePic.layer.cornerRadius = self.navigationMenuView.profilePic.frame.size.width / 2.0
        self.navigationMenuView.profilePic.layer.borderWidth = 2
        self.navigationMenuView.profilePic.layer.borderColor = UIColor.white.cgColor
    }

结果:

在此处输入图像描述

4

3 回答 3

1

我有同样的问题

这是我的解决方案:

let profilePicHeight: CGFloat = 30.0

将这行代码添加到您的约束中:

profilePic.snp.makeConstraints { (make) -> Void in
            make.height.width.equalTo(self.profilePicHeight)
            ...
        }

然后:

override func viewWillLayoutSubviews() {
    self.navigationMenuView.profilePic.layer.cornerRadius = self.profilePicHeight / 2.0
    ...
}
于 2021-01-05T10:36:25.307 回答
1

我猜你想要这个(对于普通的自动布局很抱歉,但我不使用 snapkit):

profilePic.heightAnchor.constraint(equalTo: profilePic.widthAnchor).isActive = true
profilePic.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 0.22).isActive = true

而不是这个:

make.size.equalTo(self).multipliedBy(0.22)
于 2017-11-06T12:09:52.367 回答
0

我的建议是不要把它当作从外面看的圆形视图。使视图本身符合圆形,以便您可以在任何地方使用它。

在视图内部给它一些约束,比如......

widthAnchor.constraint(equalTo: heightAnchor).isActive = true

这将使它成为正方形(大小未定)。

然后在函数layoutSubviews...

override func layoutSubviews() {
    super.layoutSubviews()

    layer.cornerRadius = bounds.size.width * 0.5
}

这将使正方形变成圆形。

于 2017-11-06T12:10:40.557 回答