用于导航控制器的iPhone UI设计 - 按钮向下移动

时间:2011-05-16 12:48:03

标签: iphone interface-builder uinavigationcontroller ui-design

我创建了一个基于导航控制器的应用程序。在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和按钮。

1 个答案:

答案 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;