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 中的代码被故事板覆盖的主要内容,如果未能解决你的问题,请参考以下文章