Вы можете использовать Autolayout , чтобы упростить задачу.
Удалить переопределение viewDidLayoutSubviews
полностью.
Используйте следующее в viewDidLoad
override func viewDidLoad()
{
super.viewDidLoad()
var drawView = UIView()
//Setup Constraints for `drawView`
drawView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
drawView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 25),
drawView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -25),
drawView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 15),
drawView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -15)
])
}
Редактировать : Решение без автоматического раскладки
Проблема в том, что ваш drawView добавляется несколько раз в иерархию представлений! Вы можете просто добавить его один раз и изменить только рамку.
class ViewController: UIViewController {
var drawView = UIView()
override func viewDidLoad()
{
super.viewDidLoad()
view.addSubview(drawView)
drawView.backgroundColor = UIColor.gray
drawView.layer.cornerRadius = 15
}
override func viewDidLayoutSubviews()
{
let drawViewOffsetFromTop = max( 25 , Int( view.safeAreaInsets.top ) )
let drawViewOffsetFromBottom = max( 25 , Int( view.safeAreaInsets.bottom ) )
let drawViewWidth = Int( view.frame.size.width ) - 2*25
let drawViewHeight = Int( view.frame.size.height) - drawViewOffsetFromTop - drawViewOffsetFromBottom
drawView.frame = CGRect(x: 25 , y: drawViewOffsetFromTop, width: drawViewWidth , height: drawViewHeight )
}
}