UISegmentedControl 角半径不变

UISegmentedControl Corner Radius Not Changing

UISegmentedControl 圆角半径没有改变。我还按照 this question, my UISegmentedControl's corner radius still is not changing. I followed This tutorial 中的一些答案创建了 UISegmentedControl。

代码:


import UIKit

class SegmentViewController: UIViewController {

    private let items = ["Black", "Red", "Green"]
    lazy var segmentedConrol: UISegmentedControl = {
        let control = UISegmentedControl(items: items)
        
        return control
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        setupViews()
    }
    fileprivate func setupViews(){
        view.addSubview(segmentedConrol)
        
        segmentedConrol.translatesAutoresizingMaskIntoConstraints = false //set this for Auto Layout to work!
        segmentedConrol.heightAnchor.constraint(equalToConstant: 40).isActive = true
        segmentedConrol.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 40).isActive = true
        segmentedConrol.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -40).isActive = true
        segmentedConrol.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        segmentedConrol.selectedSegmentIndex = 1
        //style
        segmentedConrol.layer.cornerRadius = 20
        segmentedConrol.layer.borderWidth = 2
        segmentedConrol.layer.borderColor = UIColor.black.cgColor
        segmentedConrol.backgroundColor = .red
        segmentedConrol.selectedSegmentTintColor = .darkGray
//        segmentedConrol.clipsToBounds = true
        segmentedConrol.layer.masksToBounds = true
    }

}

(PS。对大多数人来说答案可能就是这么简单,请不要介意我,我是这个领域的新手。)

子类 UISegmentedControl 并覆盖 layoutSubviews。在方法内部将角半径设置为您想要的值,您可以删除在 setupViews():

中设置角半径的部分
class YourSegmentedControl: UISegmentedControl {
    override func layoutSubviews() {
        super.layoutSubviews()
        layer.cornerRadius = 20
    }
}

在您创建 segmentedControl 的视图控制器中创建一个 YourSegmentedControl 的实例,如下所示。

lazy var segmentedConrol: YourSegmentedControl = {
            let control = YourSegmentedControl(items: items)

            return control
        }()

结果是: