Дизайн пользовательского интерфейса iPhone для навигационного контроллера - кнопки движутся вниз
-
14-11-2019 - |
Вопрос
Я создал приложение навигационного контроллера. Взгляд, который открывается под панелью NVIGATE, имеет UiimageView и куча кнопок «детализированных раскрытий» на вершине Te UiImage для навигаций.
Что я замечаю, состоит в том, что эти кнопки S отклонили от своего дизайнера (интерфейсного строителя), когда они придумывают в симуляторе.
Я подозреваю, что навигационная бата имеет что с этим делать, но они не двигаются пропорционально высоте навигационной панели.
Я не уверен, как сказать им, чтобы держать их на их позицию.
Uiimage не переполняет высоту экрана даже при навигационной панели сверху.
Есть ли какие-либо руководящие принципы / gotchas, которые нужно знать при использовании навигационного бара в верхней части?
Я использую 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», то панель NAV усекается, пока я назначаю NAV Controller в Window.RootviewController, то я вижу весь навигационный бар.
Вот как мой 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
Вот метод DidfiniShlaunchingWithingPithingpithingPitionswittions appdelegate.m
.
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 содержит делегат приложения и окно как объекты. В окне есть UIView под ним.
StartScreenViewController XIB файл имеет UiimageView и кнопки.
Решение
Снимите некоторые снимки экрана и посмотрите, как далеко они движутся вниз. Если его 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 .
Редактировать:
Я пропустил кусок здесь. Чтобы обойти это, мне пришлось добавить UIView на файл MainWindow.xib ...
1. В вашем AppDelegate.h Создать недвижимость для iBoutlet UIView * MainView
2. Сделайте вещь @property для нее и синтезировать его в .m file
3. Откройте mainwindow.xib
4. Перетащите UIView на окно (не ViewController) и сделайте его в соответствии с полной рамкой
5. Щелкните правой кнопкой мыши объект AppDelegate в окне документов в IB и подключите свойство 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;
.