在 super.viewDidLoad() 之前和之后不同的 UIImageView.frame.size :我做错了啥?

Posted

技术标签:

【中文标题】在 super.viewDidLoad() 之前和之后不同的 UIImageView.frame.size :我做错了啥?【英文标题】:Different UIImageView.frame.size before and after super.viewDidLoad() : what am I doing wrong?在 super.viewDidLoad() 之前和之后不同的 UIImageView.frame.size :我做错了什么? 【发布时间】:2016-09-02 21:51:27 【问题描述】:

我在 IB 中限制了 UIImageView。我试图为另一个约束中心设置动画,但是当我将layoutIfNeededanimateWithDuration 一起使用时,我可以看到ios 也在调整我的UIImageView 的大小。

在 print() 的帮助下,我发现我的 UIImageView 实际上是 super.viewDidLoad() 之前的 1000.0, 1000.0 和之后的 200.0, 200.0,这是我的约束的大小。

我不明白。我从来没有在任何地方输入过 1000,我的图像资源是 200x200、400x400@2x 和 600x600@3x。

我做错了什么?

编辑:这是我的一些代码。我已经根据我的资产大小对其进行了一些调整,但这仍然不是我想要的:

@IBOutlet weak var bigLogoOutlet: UIImageView!

override func viewWillAppear(_ animated: Bool) 
    bigLogoOutlet.frame.size.height = 0
    bigLogoOutlet.frame.size.width = 0




override func viewDidLoad() 
    super.viewDidLoad()
    self.title = "My title"

override func viewDidLayoutSubviews() 
    UIView.animate(withDuration: 0.5, delay: 0.5, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: 
        self.bigLogoOutlet.frame.size.height = 200
        self.bigLogoOutlet.frame.size.width = 200
        self.view.layoutIfNeeded()
        , completion: nil)

所以现在,它的大小从 0x0 调整为 200x200。好的,很酷,但它也从我的 IB 约束告诉他至少是 superview.center.x 的 x:0 y:0 移动!

【问题讨论】:

请发布该代码。那么你很可能很快就会得到答案。 Why am I having to manually set my view's frame in viewDidLoad?的可能重复 【参考方案1】:

IBOutlet 的形式将您的故事板中的约束连接到您的代码。然后在 viewDidLayoutSubviews:

widthConstraint.constant = 200
heightConstraint.constant = 200

【讨论】:

以上是关于在 super.viewDidLoad() 之前和之后不同的 UIImageView.frame.size :我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

在两个嵌套子类中调用 super.viewDidLoad() 时,我遇到了 Swift 的无限循环

在 minimumPressDuration 之前调用 NSPressGestureRecognizer

如何对`viewDidLoad()`进行单元测试

viewDidLoad 前后的区别

ARKit 无法识别参考图像

viewDidLoad 中的代码每次调用时都会运行