我必须查看: 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
的原因。
关于ios - 如何在设备大小快速变化时获取 subview 的当前大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37965383/