Ios UIView背景大小问题

Ios UIView背景大小问题,ios,objective-c,uiview,uiimageview,Ios,Objective C,Uiview,Uiimageview,我将像往常一样向UIViewController的UIView添加UIImageView,图像视图的框架与self.view相同,以确保图像覆盖整个视图。然而,在状态栏和imageView之间有大约20px的填充,我似乎无法摆脱 我尝试记录不同的帧,并收到以下结果: NSLog(@"ImageView => %@", NSStringFromCGRect([imageView frame])); NSLog(@"self.view => %@", NSStringFromCGRe

我将像往常一样向UIViewController的UIView添加UIImageView,图像视图的框架与
self.view
相同,以确保图像覆盖整个视图。然而,在状态栏和imageView之间有大约20px的填充,我似乎无法摆脱

我尝试记录不同的帧,并收到以下结果:

 NSLog(@"ImageView => %@", NSStringFromCGRect([imageView frame]));
 NSLog(@"self.view => %@", NSStringFromCGRect(self.view.frame));
 NSLog(@"Screen Bounds => %@", NSStringFromCGRect([[UIScreen mainScreen] bounds]));
 NSLog(@"App window => %@", NSStringFromCGRect([[[[UIApplication sharedApplication] delegate] window] frame]));

[LaunchViewController.m: line 26] ImageView => {{0, 0}, {320, 548}} 
[LaunchViewController.m: line 27] self.view => {{0, 0}, {320, 548}} 
[LaunchViewController.m: line 28] Screen Bounds => {{0, 0}, {320, 568}}   
[LaunchViewController.m: line 29] App window => {{0, 0}, {320, 568}}
结果表明,图像视图实际上应该覆盖
self.view
,并且在其自身和状态栏之间没有任何填充

UIViewController是UINavigationController的根视图控制器,我已将导航栏设置为隐藏。我认为这可能是问题的原因,但是在移除UINavigationController并将其替换为UIViewController之后,填充仍然存在

是否有人对移除填充物有任何建议/以前遇到过此问题并有解决方案

这是一张显示发生了什么的图像-绿色区域是UIView(
self.view
),橙色区域是UIImageView

[self.navigationController setNavigationBarHidden:YES];
[self.view setBackgroundColor:[UIColor greenColor]];

UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.frame];
[imageView setImage:[UIImage imageNamed:@"Orange-568h@2x.png"]];
[self.view addSubview:imageView];


尝试UIImageView
*imageView=[[UIImageView alloc]initWithFrame:self.view.bounds]isntead。当您将imageView添加到self.view中时,请使用
bounds
而不是
frame

尝试将self.view.frame更改为self.view.bounce

UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.frame];

或者只需在
viewDidLoad
方法上使用CGRectMake(0,0320568)

即可加载UIViewController的xib,并且不会检测到有关用户界面的更新值

如果您的UIView完全相同(没有UINavigationBar、UITabbar、状态栏或设备-iPhone 3.5英寸/4英寸的更改),则不会出现问题。但是,如果您正在更改过程中的任何内容,则在
viewDidLoad
上可能会得到错误的值

检查这一点的最简单方法是在UI更新后调试ViewDidDisplay上的屏幕和视图边界

请检查您的xib/故事板。您当前的UI和设计的界面之间有变化

要解决此问题,您可以在
viewdide上使用函数
updateUI
,然后再次更新相关视图

[self.imageView setFrame:self.view.frame]

这将解决它。

我也遇到了同样的问题,它通过以下方法解决了:

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

self.view.frame
在状态栏未隐藏时给您错误的
x
y
尝试移动[self.navigationController setNavigationBarHidden:YES];到

- (void) viewWillAppear: (BOOL) animated
{
    [super viewWillAppear: animated];    

    [self.navigationController setNavigationBarHidden: YES
                                             animated: NO];
}

在应用程序代理中将FullScreenLayout设置为YES,然后将其设置为view controller根视图控制器:

ViewController *vc = [[ViewController alloc] init];
[vc setWantsFullScreenLayout:YES];
[[self window] setRootViewController:vc];
或者您可以在viewDidLoad中进行设置

[self setWantsFullScreenLayout:YES];
有关SetWantFullScreenLayout的摘要: 当视图控制器显示其视图时,它通常会收缩该视图,以便其帧不会与设备的状态栏重叠。将此属性设置为“是”会导致视图控制器调整其视图的大小,使其填充整个屏幕,包括状态栏下的区域。(当然,要实现这一点,承载视图控制器的窗口本身的大小必须能够填充整个屏幕,包括状态栏下方的区域。)如果您有半透明的状态栏,并且希望视图的内容在该视图后面可见,则通常会将此属性设置为“是”。从


希望这能有所帮助。

查看您的
自我。查看
,如状态栏所示,下面是20点。 因此,
self.view.frame
(0,20,w,h)

您的图像视图采用相同的矩形
(0,20,w,h)
,并将其添加到
self.view
。关于
self.view
,图像视图将其帧设置为
self.view
的“y”位置下方20点

尝试将self.view.bounds
设置为图像视图框


希望这有帮助

您是在viewDidLoad还是ViewDidDisplay上执行此操作?-viewDidLoad-在调用super之前。尝试将其移动到ViewDidDisplay,在viewDidLoad上,如果您使用的是xib,则视图大小基于xib的视图。至少尝试将nslog移动到ViewDidDisplay。你应该检测到一个变化。NSLogs显示,实际上主屏幕的框架和self.view之间有20像素的差异。恐怕它需要动态的。该应用程序将不仅在iPhone 5上运行。这是强制CGRect,而不是解决方案。我相信OP完全可以自己解决。然而,他正在寻找为什么会发生这种情况——不设置图像,而是设置imageView的背景色,这样你就可以确定你正在使用的框架。我没有使用笔尖或故事板。如果你看看我发布的代码,您会发现该帧与该帧完全相同。self.view.frame为您提供了错误的x和y当状态栏未隐藏时,请尝试并查看