我的所有宽度,高度,位置和所有内容都是相对于视图设置的,所以如果iphone旋转它应该“扩展到适合”。 :)
我如何告诉iphone处于“横向模式”,即:刷新,但现在所有宽度都是高度,所有高度都是宽度?
由于 汤姆
修改 这是我目前的代码......它仍然不起作用 - 我似乎无法弄清楚如何使它工作
在我的视图控制器(不是根视图控制器)中,我有这个方法:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
(我也尝试将此方法放入我的 root 视图控制器,但这也不起作用)
然后在我的viewDidLoad
方法中我有这个:
[self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
[self.view setAutoresizesSubviews:YES];
这不起作用。 :(至少不在模拟器中。
答案 0 :(得分:2)
根据您的期望设置视图的AutoresizingMask
。
或实施layoutSubViews
方法。
另外,不要忘记实现viewControllers的shouldAutorotateToInterfaceOrientation
方法。流程如下。
shouldAutoRotateToInterfaceOrientation
事件willRotateToInterfaceOrientation
事件将发送给控制器autoresizingMask
autoresizesSubviews
属性为true,则该过程会向下钻取到子视图didRotateToInterfaceOrientation
事件将发送给控制器。这是一个示例viewController代码
- (void)loadView {
UIView* theView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
theView.backgroundColor = [UIColor blueColor];
UIView* redRectangle = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 100.0f, 100.0f)];
redRectangle.tag = 1;
redRectangle.backgroundColor = [UIColor redColor];
[theView addSubview:redRectangle];
[redRectangle release];
UIView* greenRectangle = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 120.0f, 100.0f, 100.0f)];
greenRectangle.tag = 2;
greenRectangle.autoresizingMask = UIViewAutoresizingFlexibleWidth;
greenRectangle.backgroundColor = [UIColor greenColor];
[theView addSubview:greenRectangle];
[greenRectangle release];
UIView* yellowRectangle = [[UIView alloc] initWithFrame:CGRectMake(theView.bounds.size.width-110.0f, theView.bounds.size.height-110.0f, 100.0f, 100.0f)];
yellowRectangle.tag = 3;
yellowRectangle.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin;
yellowRectangle.backgroundColor = [UIColor yellowColor];
[theView addSubview:yellowRectangle];
[yellowRectangle release];
self.view = theView;
[theView release];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
答案 1 :(得分:0)
您可以通过设置自动调整视图大小:
[ tmpView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ];
所以当你旋转它会自己调整大小。
但我认为它不会做你需要的。 所以也许你应该添加一个在设备旋转时调用的函数(在控制器中):
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { [ self refreshLayouts ]; }
然后在refreshLayouts中,您可以根据需要自行更改宽度/高度。
祝你好运!
答案 2 :(得分:0)
首先检查您的视图控制器是否正在调用旋转事件的回调方法:
-willRotateToInterfaceOrientation:duration:
-didRotateFromInterfaceOrientation:
如果没有调用它们,那么进一步没有意义,因为你的viewController根本没有旋转!
这让我感兴趣 - “在我的视图控制器中(不是根视图控制器)”。如何将视图控制器添加到窗口层次结构中?您是在呈现它,还是仅将其视图作为子视图添加到根视图控制器中?