我试图渲染一个包含子视图的视图。但是,子视图呈现在错误的y位置。
ViewController
是父视图。
ViewController2
是ViewController
的子视图,并且拥有自己的子视图(让我们称之为X
)。即使X
和ViewController2
的框架具有相同的y值,X
也会在不正确的y位置呈现。
修改:
我应该注意,X
应该出现在ViewController2
中的相同位置。或者至少,这是意图。
见下面的代码:
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
var y: CGFloat = 10
for vc in getVcs() {
self.view.addSubview(vc.render(x: 10, y: y))
y += 75
}
super.viewDidLoad()
}
func getVcs() -> [ViewController2] {
return [
ViewController2(),
ViewController2(),
ViewController2()
]
}
}
ViewController2.swift
import UIKit
class ViewController2: UIViewController {
func render(x: CGFloat, y: CGFloat) -> UIView {
let viewFrame = CGRect(x: x, y: y, width: 300, height: 50)
let xview = UIView(frame: viewFrame)
let subViewFrame = CGRect(x: x, y: y, width: 200, height: 25) // X
let subView = UIView(frame: subViewFrame)
subView.layer.borderColor = UIColor.green.cgColor
subView.layer.borderWidth = 1
xview.addSubview(subView)
xview.layer.borderColor = UIColor.red.cgColor
xview.layer.borderWidth = 1
return xview
}
}
它们在运行时的显示方式:
(绿色边框代表X
,红色边框代表ViewController2
。)
任何帮助将不胜感激!
答案 0 :(得分:1)
框架在 SUPERVIEW' S COORDINATES 中指定。您的边界位于当前视图的坐标中。因此,ViewController2的框架需要表示为相对于ViewController的框架,而不是相对于窗口。
答案 1 :(得分:1)