UIView没有显示回合

时间:2018-03-16 04:32:51

标签: ios swift rounded-corners

制作通告UIView我正在使用cornerRadius属性。

我有一个尺寸为79 * 158的UIView。

redView.layer.cornerRadius = redView.frame.size.height/2
redView.layer.masksToBounds = true

它显示的是elipse而不是circle:

It shows elipse instead of circle

任何变通方法或仅适用于方形类型(例如UIView(100 * 100))?

如果动态调整大小,我很好。

6 个答案:

答案 0 :(得分:3)

使用此...

    func makeCircle (view: UIView) {
        view.clipsToBounds = true
        let height = view.frame.size.height
        let width = view.frame.size.width
        let newHeight = min(height, width) // use "max" if you want big circle

        var rectFrame = view.frame
        rectFrame.size.height = newHeight
        rectFrame.size.width = newHeight
        view.frame = rectFrame
        view.layer.cornerRadius = newHeight/2
    }

像这样使用:

@IBOutlet var rectView: UIView!

override func viewDidLoad() {
        super.viewDidLoad()

        makeCircle(view: rectView)
    }

答案 1 :(得分:0)

不能。
尝试将UIView调整为方格:79 * 79或158 * 158

并设置:

redView.layer.cornerRadius = redView.frame.size.height/2

答案 2 :(得分:0)

你有一个尺寸为79 * 158的UIView。所以这是错误的。您应该具有完全相同的高度和宽度,以便将视图精确地舍入为圆形。

<强> E.g。

redView.frame.size.height = 79.0
redView.frame.size.width = 79.0

redView.frame.size.height = 158.0
redView.frame.size.width = 158.0

并应用角半径,如:

  redView.clipsToBounds = true
  redView.layer.cornerRadius = redView.frame.size.height / 2.0

<强>结果:

enter image description here

注意:同时检查您的约束如果您使用的是自动布局。确保视图框架不会改变。

答案 3 :(得分:0)

如果您正在使用约束,那么更改视图的边框/边界不是一个好主意。相反,你应该做以下。

  1. 如果视图包含在UIViewController中,请在cornerRadius方法中设置viewDidLayoutSubviews
  2. 如果视图本身是UIView的子类,则在cornerRadius方法中设置layoutSubviews

答案 4 :(得分:0)

只有Squire视图才能成为一个完美的圆圈。例如,如果您的视图大小为(10 * 10),(50 * 50),(100 * 100)等,那么您的视图将成为完美的乡绅而不是。

答案 5 :(得分:0)

使用IBDesignable,您可以在故事板中显示没有项目运行的牛.XIB #simple way

第1步。子类UIView:

@IBDesignable class RoundedCornerView: UIView {
    @IBInspectable var borderWidth:CGFloat = 2 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }

@IBInspectable var borderColor:UIColor = UIColor.orangeGradientLight {
    didSet {
        layer.borderColor = borderColor.cgColor
    }
}

override func layoutSubviews() {
    super.layoutSubviews()
    layer.cornerRadius = frame.height/2
    layer.masksToBounds = true
    layer.borderColor = borderColor.cgColor
    layer.borderWidth = borderWidth
}
}

第2步。在身份检查器中设置自定义类:

enter image description here