在我的故事板用户界面中,我添加了一些UIImageViews
和UIScrollViews
。我以这种方式在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,适用于任何控制器。为什么是这样?谢谢。
答案 0 :(得分:0)
在调用viewDidAppear之前,框架和边界不会被设置。尝试将此代码移至viewDidAppear
。
答案 1 :(得分:0)
正如其他答案中所述,viewDidLoad
对于这种任务来说太早了。
但是,对于布局更改,viewDidAppear
可能为时已晚,因为不再考虑最终动画的更改。
我喜欢在viewDidLayoutSubviews
中做布局工作(如果视图本身还没有通过autoSize / autoLayout / layoutSubviews / ......处理子视图布局)
答案 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)];
}