【发布时间】:2012-11-29 01:45:25
【问题描述】:
如果是 iPhone 5(4" 显示器),我正在尝试将 uiLabel 向下移动。但是当代码在 viewDidLoad 中时它不起作用。如果我通过单击 uiButton 调用代码,它可以工作。这里是代码:
-(void) viewDidLoad {
if(CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136))) {
CGRect frame = [self.timeOnCurrentQuestion frame];
frame.origin.y += 40; // change the location
[self.timeOnCurrentQuestion setFrame:frame];
nslog(@"This DOES get logged");
}
}
【问题讨论】:
-
我认为调用 viewDidLoad 时还没有设置框架,请在 viewDidAppearAnimated 中尝试:
-
是否有可能实际设置了框架,但您没有注意到?将您的更新包装在一个动画块中,并稍微延迟它的执行,这应该会向您展示正在发生的事情。只需使用 performSelector:withObject:afterDelay: 以不同的方法调用框架设置代码来修复它。
-
@CodaFi 有趣。如果我将延迟设为 0.1,它会向下移动,但随后会向上移动。如果它变成 0.6-.7,它就会出现并迅速向下移动。所以这一定意味着它是在设置框架之前被调用的
-
@JonahKatz,是的。 viewDidLoad 和 awakeFromNib 并不是为了让视图的可见更改生效,它们是为了在渲染缓冲区绘制到屏幕之前进行设置。
-
@CodaFi 那么你建议我做什么?
标签: objective-c ios viewdidload