ios - 如何在设备大小快速变化时获取 subview 的当前大小?

标签 ios swift view-bound

我必须查看: view_1 和 view_2 。 view_1 高度与主视图 Controller 高度成正比,我以编程方式添加 view_2 作为 view_1 的 subview ,具有成比例的高度。

问题

当设备尺寸从 iPhone 6 更改为 iPhone 5 时,view_1 调整正确但我传递给函数以绘制其 subview view_2 的高度仍然是在界面生成器中设置的,因此它超出了范围iPhone 4 从 iPhone 6 转移

因此我想知道如何获得 View 的正确大小,以便自动调整大小以适应当前设备?

最佳答案

Auto Layout 运行之前,不会确定 View 的大小。您获得正确尺寸的第一个机会是在 viewDidLayoutSubviews 中:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    // access view size here
}

这是一个完整的示例,它添加了第二个 View 作为第一个 View 的 subview 。 Storyboard 中添加了红色 View ;它水平和垂直居中,高度/宽度为其父 View 的 50%。

黄色 View 以编程方式添加。它的框架是根据红色 View 的框架计算的,为红色 View 宽度的 50%。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var view1: UIView!
    var view2: UIView?

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        if view2 == nil {
            view2 = UIView()
            view2?.backgroundColor = .yellowColor()
            view1.addSubview(view2!)
        }

        let width = view1.frame.size.width
        let height = view1.frame.size.height

        let frame = CGRect(x: width * 0.25, y: height * 0.25, width: width * 0.5, height: height * 0.5)

        view2?.frame = frame
    }
}

并不是说 viewDidLayoutSubviews 被多次调用,所以你必须注意不要在每次调用时都添加 view2。这就是代码检查是否添加了 view2 的原因。


iPhone 4s Simulator Portrait


iPhone 5s Simulator Landscape


iPhone 5s Rotation exmaple

关于ios - 如何在设备大小快速变化时获取 subview 的当前大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37965383/

相关文章:

ios - 生成新的 APNS 证书是否会使现有的事件证书失效

ios - 如何快速修复 HTTPBODY 的这些参数?

ios - 如何在单元格中启用 Google map 按钮?

ios - 如何在UIImageView中实现底部自定义曲线和顶部圆角半径?

ios - 将字符串转换为日期并获取日期字符串

ios - Xamarin iOS 绑定(bind) : Could not initialise an instance of the type, 返回 nil

objective-c - 在 NSMutableArray 中比较字符串的问题

scala - 从 Array[T] 到 Seq[T] 的隐式转换

scala - 限制组合隐式参数和 View /上下文边界的原因是什么?