viewDidLoad中的代码未被执行

时间:2013-02-18 11:47:57

标签: ios xcode

在我的故事板用户界面中,我添加了一些UIImageViewsUIScrollViews。我以这种方式在ViewdidLoad中设置它们的大小和位置:

- (void)viewDidLoad
{
    [facebookSharing setFrame:CGRectMake(400, facebookSharing.frame.origin.y, facebookSharing.frame.size.width, facebookSharing.frame.size.height)];
    [bumpImage setFrame:CGRectMake(500, bumpImage.frame.origin.y, bumpImage.frame.size.width, bumpImage.frame.size.height)];
}

问题是此代码未应用。我有一个具有完全相同代码的按钮,当我按下它时,它确实工作正常。那么,是否有可能在ViewDidLoad中没有执行代码。 (即使NSLog()证明ViewDidLoad实际上正在运行)?

此外,我在ViewDidLoad中为iPad的特定UIViewController提供了此代码,代码在那里工作。它适用于iPad,但不适用于iPhone,适用于任何控制器。为什么是这样?谢谢。

3 个答案:

答案 0 :(得分:0)

在调用viewDidAppear之前,框架和边界不会被设置。尝试将此代码移至viewDidAppear

答案 1 :(得分:0)

正如其他答案中所述,viewDidLoad对于这种任务来说太早了。 但是,对于布局更改,viewDidAppear可能为时已晚,因为不再考虑最终动画的更改。

我喜欢在viewDidLayoutSubviews中做布局工作(如果视图本身还没有通过autoSize / autoLayout / layoutSubviews / ......处理子视图布局)

这可能会有所帮助: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/AdoptingaFull-ScreenLayout/AdoptingaFull-ScreenLayout.html#//apple_ref/doc/uid/TP40007457-CH13-SW2

答案 2 :(得分:-1)

提供IBOutlets后,必须将属性合成化。所以我们需要使用

 - (void)viewDidLoad
   {
     [self.facebookSharing setFrame:CGRectMake(400, facebookSharing.frame.origin.y, facebookSharing.frame.size.width, facebookSharing.frame.size.height)];
     [self.bumpImage setFrame:CGRectMake(500, bumpImage.frame.origin.y, bumpImage.frame.size.width, bumpImage.frame.size.height)];
   }