我创建了一个基于导航控制器的应用程序。在nvigation栏下方打开的视图还有一个UIImageView和一系列“详细信息披露”按钮,位于te uiimage的顶部,用于导航。
我注意到,当这些按钮出现在模拟器中时,它们的设计器(界面构建器)位置已经偏离了。
我怀疑导航栏与它有关,但它们不会与导航栏的高度成比例向下移动。
我不知道如何告诉他们坚持自己的立场。
即使顶部有导航栏,UIImage也不会溢出屏幕高度。
在顶部使用导航栏时,他们需要了解的任何指南/陷阱吗?
我正在使用xcode 4
由于
修改
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
StartScreenViewController *controller =
[[StartScreenViewController alloc] initWithNibName:@"StartScreenViewController" bundle:nil];
_navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
_navigationController.view.frame = CGRectMake(0,0, 320, 460);
_navigationController.title = @"Test";
//[self.window addSubview:_navigationController.view];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
另一件事是,如果我使用'addsubview'方法,那么导航栏会被截断,而如果我将导航控制器分配给window.rootviewcontroller,那么我会看到整个导航栏。
修改2
这里我的AppDelegate.h看起来如何
@interface TestAppDelegate : NSObject <UIApplicationDelegate> {
IBOutlet UIView *mainView;
}
@property (nonatomic, retain) IBOutlet UIView *mainView;
@property (nonatomic, retain) IBOutlet UIWindow *window;
//@property (nonatomic, retain) IBOutlet UIViewController *viewController;
@end
这是AppDelegate.m的didFinishLaunchingWithOptions方法
StartScreenViewController *controller = [[StartScreenViewController alloc] initWithNibName:@"StartScreenViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
navController.title = @"Test";
navController.view.frame = CGRectMake(0, 0, 320, 460);
[self.mainView addSubview:navController.view];
[self.window makeKeyAndVisible];
MainWindow.xib包含App委托和窗口作为对象。窗口下面有一个UIView。
StartScreenViewcontroller的xib文件包含UIImageview和按钮。
答案 0 :(得分:1)
拍摄一些屏幕截图,看看它们向下移动了多远。如果它的20px那么这是一个很多人都有的问题(包括我自己)。我通过将视图重新定义为与IB中的大小相同来修复它。出于某种原因,iPhone试图变得聪明并帮助你调整大小,有时它会出错。
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
navController.view.frame = CGRectMake(0, 0, 320, 460);
[self.window addSubview:navController.view];
如果不起作用,请尝试以下搜索:https://stackoverflow.com/search?q=%5Biphone%5D+20px。
编辑:
我在这里错过了一块。为了解决这个问题,我必须在MainWindow.xib文件中添加一个UIView ....
1.在AppDelegate.h中,为IBOutlet UIView * mainView创建一个属性
2.为它做@property事情并在.m文件中合成它
3.打开MainWindow.xib
4.将UIView拖到窗口(而不是ViewController)上,使其适合整个框架
5.右键单击IB中“文档”窗口中的AppDelegate对象,并将mainView属性连接到刚刚添加的UIView。
6.现在在AppDelegate.m ...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
navController.view.frame = CGRectMake(0, 0, 320, 460);
//[self.window addSubview:navController.view]; // old broken way
[mainView addSubview:navController.view];
[self.window makeKeyAndVisible];
return YES;
}
和AppDelegate.h:
@interface TestNavigationAppAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
TestNavigationAppViewController *viewController;
IBOutlet UIView *mainView;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet TestNavigationAppViewController *viewController;
@property (nonatomic, retain) IBOutlet UIView *mainView;