Xcode Playground中的ViewController - 框架报告双倍大小(viewDidLoad)

时间:2017-02-02 18:24:05

标签: ios xcode uiviewcontroller swift-playground viewdidload

我在Xcode Swift游乐场中使用UIViewController子类。控制器的视图显然报告为双倍大小。我做错了什么或者我偶然发现了一个错误?

当我将一半宽度的黄色子视图放入视图时,它会覆盖整个宽度。

Xcode版本8.2.1(8C1002)

import UIKit
import PlaygroundSupport


class ViewController : UIViewController {
  override func viewDidLoad() {
    title = "Double Frame"
    super.viewDidLoad()
    view.frame // inspecting the frame size: 768 x 1024

    let halfV = UIView(frame: CGRect(x: 0, y: 200,
                                     width: Int(view.frame.width / 2),
                                     height: Int(view.frame.width / 2)))
    halfV.backgroundColor = UIColor.yellow
    view.addSubview(halfV)

  }
}
PlaygroundPage.current.liveView = UINavigationController(rootViewController: ViewController())

enter image description here

1 个答案:

答案 0 :(得分:2)

您将使用自动布局查看控制器视图的大小。自动布局传递将在viewDidLoad之后发生。如果您希望通过引用视图控制器视图的frame对子视图进行编程调整,则应将该代码移至viewDidLayoutSubviews。例如:

class ViewController : UIViewController {
    let halfV = UIView()

    override func viewDidLoad() {
        title = "Double Frame"
        super.viewDidLoad()
        view.frame // inspecting the frame size: 768 x 1024


        halfV.backgroundColor = UIColor.yellow
        view.addSubview(halfV)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        halfV.frame = CGRect(x: 0, y: 200,
               width: CGFloat(view.frame.width / 2),
               height: CGFloat(view.frame.width / 2))
    }
}
PlaygroundPage.current.liveView = UINavigationController(rootViewController: ViewController())