2012-09-26 43 views
0

我有一个滚动视图与几个子视图。子视图是这样定义的:UIImageView不遵循设备方向

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGRect rect = imageView.frame; 
rect.size.height = screenRect.size.height; 
rect.size.width = screenRect.size.width; 
imageView.frame = screenRect; 
[scrollView addSubview:imageView]; 

这很好地工作,直到我将界面方向更改为横向。 imageView仍处于肖像模式,将图像剪切成一半。我应该如何改变纵向高度和宽度,横向高度和宽度?

回答

1

在代码中加入这一行,并检查:

[imageView setAutoresizesSubviews:YES]; 
[imageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 

[imageView setAutoresizesSubviews:YES]; 
[imageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; 

入住这link了。

+1

也许你想把'autoresizesSubviews = YES'设置为'imageView'的父视图(上面例子中的'scrollView')呢? – barley

+0

@ barley:是的,你是对的。 –

0

你要听的UIDeviceOrientationDidChangeNotification

了解更多关于在这里:​​ http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html

一旦检测到变化,再次调用相同的代码。

+0

以我个人的经验来看,除非你转换到新的视图控制器,否则你的视图控制器层次结构与视图层次结构不同步(例如'[self.view addSubview:newController .view]'silliness)。通常,您可以使用视图控制器的事件方法来[回应旋转事件](http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/ DOC/UID/TP40006926-CH3-SW58)。 – Rob

1

一对夫妇的想法:

  1. 不是[[UIScreen mainScreen] bounds],我用self.view.bounds。这(a)会分解出状态栏,导航栏等内容;和(b)旋转时,宽度和高度会自动更新以反映新的尺寸。

  2. 如果您希望为您调整图像视图大小,通常会将其autoresizingMask设置为UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleWidth之类的值。

  3. 您可能需要检查您的图像视图的contentMode并将其设置为UIViewContentModeScaleAspectFit之类的值,以便始终显示您的整个图像。这样,如果您有一幅肖像图像,它将始终以不失真的方式以纵向显示,而不会被切断。

  4. 如果您不喜欢在旋转设备时将图像视图本身调整为风景的事实,则可以在iOS5中(iOS4中使用willAnimateRotationToInterfaceOrientation)在viewWillLayoutSubviews中重置其框架。