視圖的大小是不成立的,直到自動佈局運行。你首先要獲得正確的尺寸機會是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
的原因。
仍然得到調整在界面生成器中設置的舊大小: - /。 – irkinosor
你確定你重寫了'viewDidLayoutSubviews'而不是'viewWillLayoutSubviews'嗎? – vacawama