2016-06-22 29 views
1

我必須查看:view_1和view_2。 view_1高度與主視圖控制器高度成正比,我將view_2作爲view_1的子視圖以編程方式添加比例高度。如何在swift中設備大小發生變化時獲取子視圖的當前大小?

問題

當器件尺寸的變化說從iPhone 6到iPhone 5,view_1正確調整,但它的高度我傳遞給函數來繪製其子視圖view_2仍然是什麼在界面生成器設置因此它是列於iPhone 4的範圍從iPhone 6

因此,我想知道我怎樣才能得到一個觀點,即什麼自動調整以適應當前設備的正確尺寸移動?

回答

5

視圖的大小是不成立的,直到自動佈局運行。你首先要獲得正確的尺寸機會是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 Simulator Portrait


iPhone 5s Simulator Landscape


iPhone 5s Rotation exmaple

+0

仍然得到調整在界面生成器中設置的舊大小: - /。 – irkinosor

+0

你確定你重寫了'viewDidLayoutSubviews'而不是'viewWillLayoutSubviews'嗎? – vacawama

2

試試這個,你可以找到設備的屏幕大小。

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

幀我不想讓屏幕尺寸,但在設備中的子視圖的大小時,其大小變化和子視圖大小由系統 – irkinosor

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) 
相關問題