ios - UIView.frame 不正确

标签 ios swift uiview

在测试设置中,我将 UIViewController 嵌入到 UINavigationController 中,同时将 UIPageControl 限制在底部,固定高度为 37。在 UINavigationControllerUIPageControl 之间是分别限制在底部和顶部的 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/

相关文章:

ios - 位置管理器委托(delegate)调用更新 TableView 问题

ios - 如何修复错误 "duplicate symbol _LOG_BUFFER_LENGTH"

ios - Pod : new protocol file correctly added to the project, 但在导入模块定义中被忽略

ios - Swift 3 向 UIView 的边缘之一添加自定义边框

ios - MYSQL - 排序查询

iOS UITableViewCell 自动调整大小错误

ios - 当上一个 View 来自导航 Controller 时如何保留 TabBar 界面

swift - 我希望 imageView 图像在被点击时等于 CollectionView 图像?

ios - Tableview subview 覆盖UIView子类

ios - 如果键盘阻塞了 TextView ,则移动 UIView