0

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

我试过 NSLogging 不同的帧,并收到以下结果:

 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];
4

7 回答 7

1

在您的应用程序委托中,将 FullScreenLayout 设置为 YES,然后将其作为视图控制器作为根视图控制器:

ViewController *vc = [[ViewController alloc] init];
[vc setWantsFullScreenLayout:YES];
[[self window] setRootViewController:vc];

或者你可以在 viewDidLoad 中设置

[self setWantsFullScreenLayout:YES];

关于 setWantsFullScreenLayout 的总结:当视图控制器呈现其视图时,它通常会缩小该视图,使其框架不会与设备的状态栏重叠。将此属性设置为 YES 会导致视图控制器调整其视图的大小,以便它填满整个屏幕,包括状态栏下方的区域。(当然,要做到这一点,托管视图控制器的窗口本身必须调整大小以填满整个屏幕,包括状态栏下方的区域。)如果您具有半透明状态,通常会将此属性设置为 YES栏并希望您的视图内容在该视图后面可见。从这里

希望这可以帮助。

于 2013-05-28T06:07:02.043 回答
1

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

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

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

希望这可以帮助!

于 2013-05-28T06:13:12.870 回答
1

我有同样的问题,它解决了这个:

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

self.view.frame给你错误xy当状态栏不是hidden

于 2013-05-26T14:38:55.733 回答
0

尝试移动 [self.navigationController setNavigationBarHidden:YES]; 至

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

    [self.navigationController setNavigationBarHidden: YES
                                             animated: NO];
}
于 2013-05-26T14:48:46.240 回答
0

viewDidLoad加载 UIViewController 的 xib 的方法上,未检测到有关用户界面的更新值。

如果您的 UIView 完全相同(没有 UINavigationBar、UITabbar、状态栏或设备 - iPhone 3.5 英寸/4 英寸变化),这不会造成任何问题。但是,如果您在此过程中更改任何内容,您可能会在viewDidLoad.

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

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

要解决此问题,您可能会再次updateUI在相关视图上使用功能viewDidAppear并更新相关视图。

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

这将解决它。

于 2013-05-26T13:53:42.827 回答
0

试试 UIImageView*imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];不是。使用bounds代替frame

于 2013-05-26T13:48:47.130 回答
-1

将 imageView 添加到 self.view 时,尝试将 self.view.frame 更改为 self.view.bounce。

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

或者只使用 CGRectMake(0,0,320,568)

于 2013-05-26T13:50:51.420 回答