【问题标题】:code inside awakeFromNib being overridden by the storyboardawakeFromNib 中的代码被故事板覆盖
【发布时间】: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 触发和正在绘制的视图之间发生了一些事情吗?

任何澄清都会很棒!

【问题讨论】:

    标签: iphone ios ipad viewdidload awakefromnib


    【解决方案1】:

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

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

    【讨论】:

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