UIView背景大小调整问题

时间:2013-05-26 13:41:06

标签: ios objective-c uiview uiimageview

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

我尝试过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。

enter image description here

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

7 个答案:

答案 0 :(得分:1)

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

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
当状态栏不是self.view.frame

时,

x会向您提供错误的yhidden

答案 1 :(得分:1)

在您的应用委托中,在将视图控制器设置为根视图控制器之前,将FullScreenLayout设置为YES:

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

或者您可以在viewDidLoad

中进行设置
[self setWantsFullScreenLayout:YES];

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

希望这有帮助。

答案 2 :(得分:1)

查看您的self.view,它是20分,因为显示了状态栏。 因此,self.view.frame(0,20,w,h)

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

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

希望这有帮助!

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

最简单的检查方法是在UI更新后调试屏幕并查看viewDidAppear上的边界。

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

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

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

这将解决它。

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:-1)

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

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

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