awakeFromNib 中的代码被故事板覆盖

Posted

技术标签:

【中文标题】awakeFromNib 中的代码被故事板覆盖【英文标题】:code inside awakeFromNib being overridden by the storyboard 【发布时间】:2013-02-26 21:04:18 【问题描述】:

我有以下代码:

- (void) awakeFromNib

    CGRect temp = self.buttonOne.frame;
    temp.origin.y += 50;
    self.buttonOne.frame = temp;

里面的代码什么都不做;当应用加载时 buttonOne 正是它在故事板上的位置。

如果我在 viewDidLoad 中放置相同的代码:

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    CGRect temp = self.buttonOne.frame;
    temp.origin.y += 50;
    self.buttonOne.frame = temp;

它起作用了,按钮被向下移动了。

这是因为在 awakeFromNib 触发和正在绘制的视图之间发生了一些事情吗?

任何澄清都会很棒!

【问题讨论】:

【参考方案1】:

awakeFromNib 将在控制器从 nib 文件中取消归档时调用,而viewDidLoad 将在创建绑定到控制器的视图时调用。

因此awakeFromNib 将在viewDidLoad 之前被调用。当调用 awakeFromNib 时,视图还没有加载(如果它有 viewDidLoad 会被调用),因此对它的任何更改都不会影响它。

【讨论】:

所以当调用 awakeFromNib 时,应用程序对任何视图的坐标一无所知,并且它所做的任何更改都会被覆盖?调用哪个函数来设置情节提要中视图的初始坐标? @Bassel 当 awakeFromNib 被调用时,视图并不真正存在,因为它还没有被加载,所以你做的任何改变都不会做任何事情。调用 viewDidLoad 时会知道初始坐标,注意这可能与最终坐标不同,因为视图会调整大小以适应控制器的内容。 好吧,我禁用了视图自动调整大小并禁用了自动布局,所以这不应该发生,当我输入 viewDidLoad 时的坐标有望成为最终显示的坐标。感谢您的回答!

以上是关于awakeFromNib 中的代码被故事板覆盖的主要内容,如果未能解决你的问题,请参考以下文章

awakeFromNib() 不适用于模拟指标

在框架中覆盖故事板中的图像

为啥在使用情节提要时反复调用 AwakeFromNib?

awakeFromNib 没有调用但显示 xib

故事板转场覆盖 iPhone 4 和 5 上的垂直过渡

应用于控制器的背景未应用于故事板swift中的表格视图单元格