如何在Swift中以编程方式从UIView中移除安全区域?

3

这是一个自定义视图,它可以创建一个给定框架和背景颜色的正方形。我正在将自定义视图添加到子视图中,视图显示正常。但是我无法覆盖底部安全区域,请问有人能帮我编写程序以移除底部的安全区域吗?

class CustomView: UIView {
    
    override var frame: CGRect {
         
        didSet {
            setNeedsDisplay()   
        }
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.isOpaque = false
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.isOpaque = false
    }
    
    override func draw(_ rect: CGRect) {
                
        UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.7).setFill()
        UIRectFill(rect)
        
        let square = UIBezierPath(rect: CGRect(x: 200, y: rect.size.height/2 - 150/2, width: UIScreen.main.bounds.size.width - 8, height: 150))
        let dashPattern : [CGFloat] = [10, 4]
        square.setLineDash(dashPattern, count: 2, phase: 0)
        UIColor.white.setStroke()
        square.lineWidth = 5
        square.stroke()
        
    }
       
}
2个回答

5

考虑下面的例子:

class ViewController: UIViewController {

    private let myView = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()
        configureCustomView()
    }

    private func configureCustomView() {
        myView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(myView)
        myView.backgroundColor = .systemPurple

        NSLayoutConstraint.activate([
            myView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            myView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            myView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            myView.heightAnchor.constraint(equalToConstant: 200)
        ])
    }
}
结果:
enter image description here

如果您不想跨越安全区域,则可以在NSLayoutConstraint.activate([...]) 内使用 myView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)

因此,您实际上无需删除安全区域,如果您想要忽略它们,则可以简单地忽略它们。


0

如果你想快速完成这个任务(非程序化)

  1. 打开Storyboard。
  2. 选择你的UIView。

enter image description here

  1. 安全区应该取消选择。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接