奇怪的UIView坐标问题

时间:2012-05-03 16:47:32

标签: iphone xcode uiview

我正在撰写一个通用的应用程序。因此,我已经设置了它,以便我的XIB / NIB不是使用视图控制器创建的,而是单独创建,然后通过将XIB上的Class Name设置为相应视图控制器的类名称链接到视图控制器(和将文件所有者上的视图链接到XIB上的视图)。然后我在初始化视图控制器时加载适当的XIB / NIB(iPhone或iPad),如下所示:

SomeViewController *vc = [[SomeViewController alloc] initWithNibName:@"SomeView-iPhone" bundle:nil];
[self.navigationController pushViewController:vc animated:YES];
[vc release];

此外,iphone版本设置在底部的UITabBarController和顶部的UINavigationController。这是这样创建的:

MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
UINavigationController *localNavigationController;
UITabBarController *tabBarController = [[UITabBarController alloc] init];
NSMutableArray *localControllersArray = [[NSMutableArray alloc] init]; 

//setup the first tab
FirstViewController *vc = [[FirstViewController alloc] initWithNibName:@"FirstView-iPhone" bundle:nil];
localNavigationController = [[UINavigationController alloc] initWithRootViewController:vc];
[localControllersArray addObject:localNavigationController];
[localNavigationController release];
[vc release];

//setup the second tab
SecondViewController *vc = [[SecondViewController alloc] initWithNibName:@"SecondView-iPhone" bundle:nil];
localNavigationController = [[UINavigationController alloc] initWithRootViewController:vc];
[localControllersArray addObject:localNavigationController];
[localNavigationController release];
[vc release];

....

//set the controllers onto the tab bar
tabBarController.viewControllers = localControllersArray;
[localControllersArray release];    

[appDelegate.window setRootViewController:tabBarController];
[tabBarController release];  

一切都很好。 iPhone视图显示正常(带有工作标签栏和导航栏),导航工作正常。这里的事情变得奇怪(两条龙很奇怪)。

- 位于IB中的大多数UI元素(标签,按钮等)显示正常 - 如果我在代码中创建一个UIScrollView并将其添加到视图中,它会显示正常 - 如果我在IB中创建一个UIScrollView并将其放在视图上,它会在运行时向上移动93像素,在设计时它出现在IB中 - 如果我在IB中创建一个UIScrollView作为单独的视图,然后将其添加到代码中的主视图中,它将被调整为93像素。

换句话说,如果我这样做:

[scrollView setFrame:CGRectMake(0,0,320,100)];
[self.view addSubview:scrollView]; 

然后它将在0,0处显示在代码中创建的UIScrollView,但它将在(0,-93)显示在IB中创建的UIScrollView(并通过IBOutlet链接到ivar)。现在碰巧93 = 44 + 49,这是标签栏和导航栏组合的高度。这显然不是巧合。

所以问题是,为什么iOS在运行时通过导航栏和标签栏的高度移动在IB中创建的滚动视图(而不是其他UI元素,如UILabel或UIButton)?

编辑:我之前在使用iPhone的应用程序中使用了设置标签栏和导航栏的代码,并且没有出现此问题,因此我怀疑这与使用initWithNibName初始化我的问题有关查看控制器或手动将XIB文件链接到VC,因为这与我的通用应用程序有所不同。

1 个答案:

答案 0 :(得分:2)

我解决了。我偶然发现了这个问题/答案:

UIView size/position not working on iPad as on iPhone

发生这种情况是因为默认情况下,在IB中创建的滚动视图设置为自动调整到左下角。我把它切换到绑定到左上角,现在一切都很顺利。奇怪。