在测试设置中,我将 UIViewController
嵌入到 UINavigationController
中,同时将 UIPageControl
限制在底部,固定高度为 37。在 UINavigationController
和 UIPageControl
之间是分别限制在底部和顶部的 UIScrollView
。
override func viewDidLoad() {
super.viewDidLoad()
print("view.bounds \(view.bounds)")
print("view.frame \(view.frame)")
print("navbar.bounds \((navigationController?.navigationBar.bounds)!)")
print("navbar.frame \((navigationController?.navigationBar.frame)!)")
print("scrollView.bounds \(scrollView.bounds)")
print("scrollView.frame \(scrollView.frame)")
print("pageControl.bounds \(pageControl.bounds)")
print("pageControl.frame \(pageControl.frame)")
}
产量:
view.bounds (0.0, 0.0, 375.0, 667.0)
view.frame (0.0, 0.0, 375.0, 667.0)
navbar.bounds (0.0, 0.0, 375.0, 44.0)
navbar.frame (0.0, 20.0, 375.0, 44.0)
scrollView.bounds (0.0, 0.0, 600.0, 499.0)
scrollView.frame (0.0, 64.0, 600.0, 499.0)
pageControl.bounds (0.0, 0.0, 600.0, 37.0)
pageControl.frame (0.0, 563.0, 600.0, 37.0)
View 按应有的方式加载,UIPageControl
位于最底部,UIScrollView
一直延伸到其顶部。
那么为什么打印输出结果不正确?
即如果 View 高度 = 667,状态栏高度 = 20,导航栏高度 = 44 & 页面控件高度 = 37
667 - 20 - 44 - 37 = 556 (!= 499)
所以 ScrollView 的高度是错误的,UIPageControl.frame
也是错误的!
此外:
let pageControlView = UIView(frame: pageControl.frame)
pageControlView.backgroundColor = UIColor.blackColor()
let window: UIWindow! = (UIApplication.sharedApplication().delegate?.window)!
window.addSubview(pageControlView)
window.bringSubviewToFront(pageControlView)
将 pageControlView
置于 UIPageControl
所在的位置...这里发生了什么我很困惑!
编辑:
这是我得到的横向:
view.bounds (0.0, 0.0, 667.0, 375.0)
view.frame (0.0, 0.0, 667.0, 375.0)
navbar.bounds (0.0, 0.0, 667.0, 32.0)
navbar.frame (0.0, 0.0, 667.0, 32.0)
scrollView.bounds (0.0, 0.0, 600.0, 499.0)
scrollView.frame (0.0, 64.0, 600.0, 499.0)
pageControl.bounds (0.0, 0.0, 600.0, 37.0)
pageControl.frame (0.0, 563.0, 600.0, 37.0)
最佳答案
Autolayout 直到 viewDidLayoutSubviews
才完成计算帧。如果您想在 View 出现之前执行某些操作,请将任何需要完整框架的内容移到那里。
关于ios - UIView.frame 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33643699/