Iphone 视图坐标问题

Iphone 视图坐标问题,iphone,xcode,uiview,Iphone,Xcode,Uiview,我正在写一个通用应用程序。因此,我将其设置为不使用视图控制器创建我的XIB/NIB,而是单独创建,然后通过将XIB上的类名设置为相应视图控制器的类名(并将文件所有者上的视图链接到XIB上的视图)链接到视图控制器。然后,当视图控制器初始化时,我加载适当的XIB/NIB(iPhone或iPad),如下所示: SomeViewController *vc = [[SomeViewController alloc] initWithNibName:@"SomeView-iPhone" bundle:ni

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

SomeViewController *vc = [[SomeViewController alloc] initWithNibName:@"SomeView-iPhone" bundle:nil];
[self.navigationController pushViewController:vc animated:YES];
[vc release];
此外,iphone版本的设置在底部有一个UIDABBARCONTROLLER,在顶部有一个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并将其放在视图中,它在运行时会从设计时在IB中出现的位置向上变换93个像素
-如果我在IB中创建一个UIScrollView作为一个单独的视图,然后在代码中将其添加到主视图中,它会被调换93个像素。

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

[scrollView setFrame:CGRectMake(0,0,320,100)];
[self.view addSubview:scrollView]; 
然后,对于在代码中创建的UIScrollView,它将显示在0,0,但是对于在IB中创建的UIScrollView(并通过IBOutlet链接到ivar),它将显示在(0,-93)。现在正好是93=44+49,这是选项卡栏和导航栏的高度之和。这显然不是巧合

所以问题是,为什么iOS会在运行时将IB中创建的滚动视图向上移动导航栏和选项卡栏的高度(而不是UILabel或UIButton等其他UI元素)


编辑:我以前在一个只支持iPhone的应用程序中使用过设置选项卡栏和导航栏的代码,但没有这个问题,所以我怀疑这与使用initWithNibName初始化视图控制器或手动将XIB文件链接到VC有关,这就是我的通用应用程序的不同之处。

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


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

这些问题的可能重复之处甚至不尽相同。同一个问题,两个完全不同的背景。如果你解决了问题,请将你的答案标记为解决方案