我已经编写了一些代码,它们适用于UIViewController的视图并将其映像到视图中。该代码应该是iPhone屏幕独立的,只要iPhone 4和5之间的高度不同。
self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight;
self.view.clipsToBounds = YES;
UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"myimage.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIView *imageView = [[UIView alloc] initWithFrame:CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height)];
imageView.backgroundColor = [UIColor colorWithPatternImage:image];
[self.view addSubview: imageView];
image = nil;
imageView = nil;
我发现当我将此代码添加到viewDidLoad方法时,代码无法检测到不同的窗口大小。但是当我将它放在viewWillAppear中时,代码确实可以正确处理两种屏幕尺寸。我不明白为什么。
有人知道为什么会这样吗?我想了解它。
感谢
答案 0 :(得分:1)
发生这种情况是因为在加载视图时,其内容未必布局且未知大小。使用autolayout系统时尤其如此。基本步骤是,
所以放置它的最合适的地方似乎是viewDidLayoutSubviews。在那时,视图及其子视图已经布局,并且大小在那里。但是将它放在viewWillAppear(或viewDidAppear,就此而言)可以工作,虽然不太正确。
答案 1 :(得分:0)
在创建视图控制器的根视图时调用viewDidLoad方法。此时,它未添加到窗口层次结构中,并且尚未执行自动布局。这就是你看到这种行为的原因。
这就是说为什么要在图形上下文中绘制图像?只需使用UIImageView即可显示图像。
答案 2 :(得分:0)
你在做什么几乎是正确的。正如其他人所说,在viewDidLoad
中,视图控制器视图的最终大小尚未设置。正确的解决方案是正确设置子视图autoresizingMask
。
UIView *imageView = [[UIView alloc] initWithFrame:CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height)];
imageView.backgroundColor = [UIColor colorWithPatternImage:image];
imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[self.view addSubview: imageView];
这假设您希望图像视图填充视图控制器的视图。
另一种解决方案是使用viewWillLayoutSubviews
方法更新子视图的帧。