0

我创建了一个基于导航控制器的应用程序。在导航栏下方打开的视图有一个 UIImageView 和一组用于导航目的的 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 委托和作为对象的窗口。Window 下面有一个 UIView。

StartScreenViewcontroller 的 xib 文件有 UIImageview 和按钮。

4

1 回答 1

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 的 Documents 窗口中右键单击 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;
于 2011-05-16T13:14:05.167 回答