IPad 游乐场有不同 View.Frame

IPad Playground Has Different View.Frame

我正在尝试使用以下代码在 iPad 游乐场中展示这个简单的 ViewController:

import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
    setupViews()
}

func setupViews() {
    let view1 = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width/2, height: 100))
    view1.backgroundColor = .red
    view.addSubview(view1)
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

你可以看到,即使 View1 的框架显示 view.frame.width/2,视图仍然是这样的:

怎么了?谢谢。

您可以在初始化 ViewController 后设置您喜欢的尺寸:

import UIKit
import PlaygroundSupport

class VC: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        setupViews()
    }

    func setupViews() {
        let view1 = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width/2, height: 100))
        view1.backgroundColor = .red
        view.addSubview(view1)
    }
}

let vc = VC()
vc.preferredContentSize = CGSize(width: 768, height: 1024)

PlaygroundPage.current.liveView = vc

Playground with preferredContentSize

Playground without preferredContentSize

这是我使用的解决方案,它可以正常工作。在 Swift Playgrounds 中,布局是在 viewDidLayoutSubview 方法中创建的,因此所有框架都应该在那里创建。