Ios 带自动布局的圆形视图(snapkit)?
我正在尝试创建一个圆形视图,该视图具有基于自动布局的自适应大小,当前我设置了约束,然后尝试在viewwilllayoutsubviews方法中对图像进行圆形化 这会导致形状奇怪的视图不是圆形的,如何解决此问题 初始化: 限制: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
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
...
}