swift 中设备大小发生变化时如何获取子视图的当前大小?
how to get current size of a subview when device size changes in swift?
我必须查看:view_1 和 view_2。 view_1 高度与主视图控制器高度成正比,我以编程方式添加 view_2 作为 view_1 的子视图,具有成比例的高度。
问题
当设备尺寸从 iPhone 6 变为 iPhone 5 时,view_1 调整正确但它的高度我传递给一个函数来绘制它的子视图 view_2 仍然是在界面生成器中设置的,因此它在 iPhone 4 中超出范围,从 iPhone 6
移动
因此我想知道如何获得正确的视图大小,自动调整大小以适应当前设备?
试试这个,你可以找到设备的屏幕尺寸。
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height
在 Auto Layout 运行之前,不会确定视图的大小。您获得正确尺寸的第一个机会是 viewDidLayoutSubviews
:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// access view size here
}
这是一个完整的示例,它添加了第二个视图作为第一个视图的子视图。 Storyboard 中添加了红色视图;它水平和垂直居中,height/width 占其父视图的 50%。
黄色视图是以编程方式添加的。它的框架是根据红色视图的框架计算出来的,是红色视图宽度的 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
的原因。
尝试在 Viewdidload 中执行此操作
首先你需要设置视图一帧
view_1.frame = CGRectMake(0 , 0, self.view.frame.width, self.view.frame.height)
然后设置view_2
的帧
view_2.frame = CGRectMake(0 , 0, view_1.frame.width, view_1.frame.height)
我必须查看:view_1 和 view_2。 view_1 高度与主视图控制器高度成正比,我以编程方式添加 view_2 作为 view_1 的子视图,具有成比例的高度。
问题
当设备尺寸从 iPhone 6 变为 iPhone 5 时,view_1 调整正确但它的高度我传递给一个函数来绘制它的子视图 view_2 仍然是在界面生成器中设置的,因此它在 iPhone 4 中超出范围,从 iPhone 6
移动因此我想知道如何获得正确的视图大小,自动调整大小以适应当前设备?
试试这个,你可以找到设备的屏幕尺寸。
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height
在 Auto Layout 运行之前,不会确定视图的大小。您获得正确尺寸的第一个机会是 viewDidLayoutSubviews
:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// access view size here
}
这是一个完整的示例,它添加了第二个视图作为第一个视图的子视图。 Storyboard 中添加了红色视图;它水平和垂直居中,height/width 占其父视图的 50%。
黄色视图是以编程方式添加的。它的框架是根据红色视图的框架计算出来的,是红色视图宽度的 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
的原因。
尝试在 Viewdidload 中执行此操作 首先你需要设置视图一帧
view_1.frame = CGRectMake(0 , 0, self.view.frame.width, self.view.frame.height)
然后设置view_2
的帧view_2.frame = CGRectMake(0 , 0, view_1.frame.width, view_1.frame.height)