Это должно быть что-то действительно простое, и мои базовые математические знания могут отсутствовать.Это ясно (из этого вопроса ):
Кадр представления определяет его расположение в суперпредставлении .Границы представления определяют его местоположения подпредставлений .Это означает, что если вы измените границы представления, его местоположение не изменится, но изменится все расположение его подпредставлений.
Контроллер представления после запуска приложения Single View:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let v1 = UIView(frame: CGRect(x: 100, y: 100, width: 200, height: 300))
v1.backgroundColor = UIColor.blue
let v2 = UIView(frame: v1.bounds.insetBy(dx: 50, dy: 50))
v2.backgroundColor = UIColor.red
self.view.addSubview(v1)
v1.addSubview(v2)
}
Проверка на консоли LLDB также совершенно ясна:
(lldb) p v1.frame
(CGRect) $R0 = (origin = (x = 100, y = 100), size = (width = 200, height = 300))
(lldb) p v1.bounds
(CGRect) $R1 = (origin = (x = 0, y = 0), size = (width = 200, height = 300))
(lldb) p v2.frame
(CGRect) $R2 = (origin = (x = 50, y = 50), size = (width = 100, height = 200))
(lldb) p v2.bounds
(CGRect) $R3 = (origin = (x = 0, y = 0), size = (width = 100, height = 200))
Добавление v1.bounds.origin.x += 50
(или v1.bounds.origin.x = 50
в этом отношении) после v1.addSubview(v2)
приводит к:
(lldb) p v1.frame
(CGRect) $R0 = (origin = (x = 100, y = 100), size = (width = 200, height = 300))
(lldb) p v1.bounds
(CGRect) $R1 = (origin = (x = 50, y = 0), size = (width = 200, height = 300))
(lldb) p v2.frame
(CGRect) $R2 = (origin = (x = 50, y = 50), size = (width = 100, height = 200))
(lldb) p v2.bounds
(CGRect) $R3 = (origin = (x = 0, y = 0), size = (width = 100, height = 200))
Вывод консоли LLDB все еще согласуется с моим текущим пониманием, но тогда он выглядит так:
Почему? Попытка рассуждать об этом (см. Ниже), и я понимаю, что системы координат представлений относительно друг друга, но если добавить 50до v1
origin.x
, эффективность подпредставлений frame.origin
должна быть (x=50+50, y=0)
.