hua*_*nyu 2 frame ios childviewcontroller swift
我使用childViewController在项目中分离视图,但是发生了一些奇怪的问题,这是我的代码。
class ViewController: UIViewController {
var container = UIView()
var childVC = ChildViewController()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
addChildViewController(childVC)
childVC.didMove(toParentViewController: self)
addChildView()
setContainerFrame()
}
func setContainerFrame() {
container.frame = CGRect(x: 0, y: 100, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height - 100)
container.backgroundColor = .red
view.addSubview(container)
}
func addChildView() {
let frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
childVC.view.frame = frame
childVC.view.backgroundColor = .green
container.addSubview(childVC.view)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("childVC.view.frame: \(childVC.view.frame)")
}
}
class ChildViewController: UIViewController {
}
Run Code Online (Sandbox Code Playgroud)
当我交换在ViewController的viewDidLoad()中调用func addChildView()和setContainerFrame()函数的顺序时,xcode控制台会打印不同的帧日志。
这是由于childVC.view的autoresizingMask所致。默认情况下,此设置为具有灵活的宽度和高度。因此,如果您先设置容器的框架,然后再设置childVC.view的框架,那么您将获得设置的实际值,但是如果您将其反转并设置了childVC.view的框架,然后再设置容器的childVC的框架。视图将自动更新为具有相同的相对宽度和高度。
例如,如果容器的帧大小为100 x 100,然后将其更改为200 x 200,则childVC.view的帧大小将加倍。
要删除此设置,childVC.view.autoresizingMask = []使其保持设置不变。
| 归档时间: |
|
| 查看次数: |
1495 次 |
| 最近记录: |