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

Posted

技术标签:

【中文标题】Xcode Playground 中的 ViewController - 帧报告双倍大小 (viewDidLoad)【英文标题】:ViewController in Xcode Playground - frame reporting double sized (viewDidLoad) 【发布时间】:2017-02-02 18:24:05 【问题描述】:

我在 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())

【问题讨论】:

在调用 viewDidLoad 之后的某个时间,您的视图控制器的视图正在调整大小。您需要使用约束/自动调整掩码/其他一些方法来调整黄色的大小,这些方法会在超级视图调整大小时调整它的大小。 【参考方案1】:

您视图控制器的视图将使用自动布局调整大小。自动布局传递将在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())

【讨论】:

以上是关于Xcode Playground 中的 ViewController - 帧报告双倍大小 (viewDidLoad)的主要内容,如果未能解决你的问题,请参考以下文章

如何在项目目录中的 Xcode 内打开 Playground?

Xcode 中的 Swift Playground - 到 UILabel 的 TapGestureRecognizer 不起作用

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

Xcode-playground 的时间线:白色背景上的白色文本

在 Xcode Playground 中打印每个数组项?

在 Xcode Playground 中,控制右侧栏中的字符串表示?