Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带自动布局的圆形视图(snapkit)?_Ios_Swift_Autolayout_Snapkit - Fatal编程技术网

Ios 带自动布局的圆形视图(snapkit)?

Ios 带自动布局的圆形视图(snapkit)?,ios,swift,autolayout,snapkit,Ios,Swift,Autolayout,Snapkit,我正在尝试创建一个圆形视图,该视图具有基于自动布局的自适应大小,当前我设置了约束,然后尝试在viewwilllayoutsubviews方法中对图像进行圆形化 这会导致形状奇怪的视图不是圆形的,如何解决此问题 初始化: 限制: profilePic.snp.makeConstraints { (make) -> Void in make.centerX.equalTo(self).multipliedBy(0.80) mak

我正在尝试创建一个圆形视图,该视图具有基于自动布局的自适应大小,当前我设置了约束,然后尝试在viewwilllayoutsubviews方法中对图像进行圆形化

这会导致形状奇怪的视图不是圆形的,如何解决此问题

初始化:

限制:

 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)
            }
profilePic.snp.makeConstraints { (make) -> Void in
            make.height.width.equalTo(self.profilePicHeight)
            ...
        }
子视图:

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
    }
结果:

我想你想要这个(很抱歉使用了简单的自动布局,但我不使用snapkit):

与此相反:

make.size.equalTo(self).multipliedBy(0.22)

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

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

widthAnchor.constraint(equalTo: heightAnchor).isActive = true
这将使其成为方形(尺寸待定)

然后在函数
布局子视图中

override func layoutSubviews() {
    super.layoutSubviews()

    layer.cornerRadius = bounds.size.width * 0.5
}
这将使正方形变成圆形。

我也有同样的问题

这是我的解决方案:

let profilePicHeight: CGFloat = 30.0
将这行代码添加到约束中:

 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)
            }
profilePic.snp.makeConstraints { (make) -> Void in
            make.height.width.equalTo(self.profilePicHeight)
            ...
        }
然后:


尝试在imageView中再添加一个约束“纵横比”到1:1。因为如果你想要圆形,就必须有正方形的imageView。这就是代码已经做过的吗?我使它在约束中成正方形,然后在约束中成圆形subviews@jackdm但您仍然告诉它在视图控制器中是方形的。将视图本身设置为正方形是有意义的。此外,我还质疑snap kit的使用。自动布局真的不难做到。我建议放弃这个,只学习自动布局。
override func viewWillLayoutSubviews() {
    self.navigationMenuView.profilePic.layer.cornerRadius = self.profilePicHeight / 2.0
    ...
}