Добро пожаловать в Stackoverflow.
Вы на самом деле просите кадр слишком быстро. Я предполагаю, что представление не было полностью обработано, когда вы пытаетесь напечатать его рамку / границы.
С такой задержкой вы получите правильные значения.
let myView = UIView()
view.addSubview(myView)
myView.translatesAutoresizingMaskIntoConstraints = false
myView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15).isActive = true
myView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -15).isActive = true
myView.topAnchor.constraint(equalTo: view.topAnchor, constant: 80).isActive = true
myView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -60).isActive = true
myView.backgroundColor = .blue
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
let myWidth1 = myView.frame.size.width
let myWidth2 = myView.bounds.width
print(myWidth1)
print(myWidth2)
}
РЕДАКТИРОВАТЬ: как обсуждалось в комментарии, это не должно быть сделано. Этот ответ был опубликован, предполагая, что OP хотел знать причину, по которой значение 0.
Чтобы добавить, наряду с другими комментариями / ответами, вы можете просто получить значение из viewDidLayoutSubviews
.