gpt4 book ai didi

ios - 无法在 viewDidLoad 中更新 view.layer.frame?

转载 作者:技术小花猫 更新时间:2023-10-29 10:29:49 25 4
gpt4 key购买 nike

我正在尝试在我的单 View Controller 项目的 viewDidLoad 方法中执行以下代码:

self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20); 

但它没有给出所需的插图。然而,我用相同方法所做的其他 UI 更改确实有效,例如

self.view.layer.backgroundColor = [UIColor orangeColor].CGColor;

上面的代码行确实有效,背景变为橙色,但框架没有。

仅当我将代码行放在 viewDidAppear 中时,插图才有效。如果有人能解释的话,我想了解这种行为的主要原因。提前谢谢你。

最佳答案

我认为您在这一行中遇到的问题:

self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20);

可以这样解释:

  • 在 viewDidLoad 中,设置了属性,但尚未定义 View 的框架
  • 当 viewWillAppear 被触发时,它们将被设置。这解释了为什么该行代码在那里工作。
  • 但从 iOS 5 开始,在 viewDidLoad 之后和 viewWillAppear 之前调用了另一种方法,其中设置了 View 框架:viewDidLayoutSubviews

您可以在本季关于 iOS 编程的斯坦福 CS193P 类(class)中找到对此的完整解释(顺便说一句,非常酷)。

因此,如果您希望它只工作一次,请使用:

- (void)viewDidLayoutSubviews
{
self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20);
}

PS:我也在 Ray 的论坛上发布了这个答案。问候,弗雷德

关于ios - 无法在 viewDidLoad 中更新 view.layer.frame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9476227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com