我的iphone应用程序设置中有一个视图控制器,这样当我将方向从纵向更改为横向时,我会更改视图。当我将方向从横向更改为纵向时,初始视图会返回,除非此时它全部塞入屏幕的左侧。最终,当我改变方向足够的时候,一切都完全消失了。这是初学者常见的问题吗?我能做错什么?
在我的根控制器中,我只允许在使用以下方式显示特定视图时更改方向:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if (self.currentView == (NSInteger*)Chart || self.currentView == (NSInteger*)Detail) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
return (interfaceOrientation == UIInterfaceOrientationPortrait);
其中self.currentView
是我目前拥有的观点的枚举。详细信息视图我想确保保持为纵向视图,但是当我在该视图上更改方向时,我希望它将视图更改为图形。同样,这在第一次工作正常,但是当我从Graph更改回Detail时,它将Detail视图上的所有控件都移到屏幕的左侧。
以下是我如何更改视图:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
if (self.currentView == (NSInteger*)Detail && (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"changeView" object:self userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:Chart] forKey:@"view"]];
}
if (self.currentView == (NSInteger*)Chart && (toInterfaceOrientation == UIInterfaceOrientationPortrait)) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"changeView" object:self userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:Detail] forKey:@"view"]];
}
答案 0 :(得分:1)
@justin我曾经这样做过,让我和你一样。也许你可以检查你是否还没有这样做
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
CGRect rect;
if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
rect = CGRectMake(tableView.frame.origin.x,tableView.frame.origin.y,
tableView.frame.size.width - 50, tableView.frame.size.height - 30);
}
else {
rect = CGRectMake(tableView.frame.origin.x,aBar.frame.origin.y,
tableView.frame.size.width, tableView.frame.size.height);
}
[tableView setFrame:rect];
return YES;
}
我想要的只是在纵向模式下使用小框架的桌面视图,而不保存原始框架我试图减小其宽度和高度,最终在多次旋转后将表格视图调整到非常小的尺寸。
Lolzzz。我应该首先保存原始的tableview框架,然后做类似的事情
if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
tableView.frame = CGRectMake(tableView.frame.origin.x,tableView.frame.origin.y,
tableView.frame.size.width - 50, tableView.frame.size.height - 30);
}
else {
tableView.frame = originalTableViewFrame;
}
答案 1 :(得分:0)
检查您的视图上是否有autoresizeSsubviews ON(在XIB / Interface Builder中)以及可能的父视图,如果您手动更改帧,请尝试将其关闭,这样就解决了我的情况