gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:39:07 24 4
gpt4 key购买 nike

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

问题

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

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

最佳答案

自动布局运行之前, View 的大小不会确定。您获得正确大小的第一个机会是在 viewDidLayoutSubviews 中:

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

// access view size here
}
<小时/>

这是一个完整的示例,它将第二个 View 添加为第一个 View 的 subview 。 Storyboard中添加了红色 View ;它水平和垂直居中,高度/宽度是其 super 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/42467752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com