【问题标题】:how to get current size of a subview when device size changes in swift?当设备大小迅速变化时,如何获取子视图的当前大小?
【发布时间】:2016-06-22 10:31:04
【问题描述】:

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

问题

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

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

【问题讨论】:

    标签: ios swift view-bound


    【解决方案1】:

    Auto Layout 运行之前,不会确定视图的大小。您获得正确尺寸的第一个机会是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 的原因。




    【讨论】:

    • 仍然在界面生成器中设置旧尺寸:-/ .
    • 您确定您覆盖了viewDidLayoutSubviews 而不是viewWillLayoutSubviews
    【解决方案2】:

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

    let screenSize: CGRect = UIScreen.mainScreen().bounds
    let screenWidth = screenSize.width
    let screenHeight = screenSize.height
    

    【讨论】:

    • 我不想要屏幕大小,而是设备中子视图的大小,当它的大小发生变化并且子视图大小被系统调整时
    【解决方案3】:

    尝试在 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) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多