1

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

问题

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

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

4

3 回答 3

6

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

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    // access view size here
}

这是一个完整的示例,它添加了第二个视图作为第一个视图的子视图。故事板中添加了红色视图;它水平和垂直居中,它的高度/宽度是其父视图的 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已添加的原因。


iPhone 4s 模拟器肖像


iPhone 5s 模拟器风景


iPhone 5s 旋转示例

于 2016-06-22T10:37:17.113 回答
1

试试这个,你可以找到设备的屏幕尺寸。

let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height
于 2016-06-22T10:34:04.817 回答
1

尝试在 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) 
于 2016-06-22T10:49:21.717 回答