UITabBarController дисплей
Я новичок в разработке iOS. Я разрабатываю приложение, которое использует контроллер панели вкладок. Я устанавливаю рамку для контроллера панели вкладок программно, но когда я переключаюсь на iPhone 5, между элементами панели вкладок и основным видом создается пустое пространство. Ниже приведен скриншот приложения на симуляторе iPhone 5.
Ниже приведена строка кода, где я устанавливаю кадр для UITabBarController
:
[rootTabBarController.view setFrame:CGRectMake(0,-20,320, 480)];
4 ответа
Поставить эту строку кода и проверить его, вы должны установить кадры соответственно.
if ([[UIScreen mainScreen] bounds].size.height == 568)
{
[rootTabBarController.view setFrame:CGRectMake(0,0,320, 568)];
}
else
{
[rootTabBarController.view setFrame:CGRectMake(0,0,320, 480)];
}
Вам необходимо настроить кадр в соответствии с разрешением устройства. Как мы знаем, размер экрана iPhone 5 составляет (320 568), поэтому вы можете проверить, используете ли вы iPhone 5 (4-дюймовый экран) или другой (3,5-дюймовый экран), используя
#define IS_IPHONE ( [[[UIDevice currentDevice] model] isEqualToString:@"iPhone"])
#define IS_HEIGHT_GTE_568 [[UIScreen mainScreen ] bounds].size.height >= 568.0f
#define IS_IPHONE_5 ( IS_IPHONE && IS_HEIGHT_GTE_568 )
а затем установить кадр как
[rootTabBarController.view setFrame:CGRectMake(0,-20,320,IS_IPHONE_5?568.0f:480.0f)];
Надеюсь, это поможет вам.
just.dont.do.it (не устанавливать фрейм)!!!
Самый простой и чистый метод:
YourAppDelegate.h:
@property(nonatomic,retain) UITabBarController * tabBarController;
YourAppDelegate.m:
@synthesize tabBarController;
#pragma mark -
#pragma mark Application lifecycle
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
UINavigationController *viewController1 = [[[UINavigationController alloc] initWithRootViewController:[[[UIViewController alloc] init] autorelease]] autorelease];
UINavigationController *viewController2 = [[[UINavigationController alloc] initWithRootViewController:[[[UIViewController alloc] init] autorelease]] autorelease];
self.tabBarController.viewControllers = @[viewController1, viewController2];
self.tabBarController.customizableViewControllers = nil;
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
И все будет хорошо. Рамки, вращение, авторазмер, на iPhone, iPad и т. Д. И т. Д.
Кстати, вы можете создать новый проект с помощью шаблона "Панель вкладок" в XCode и посмотреть, как это делает Apple
и.. (совет, который может помочь вам в будущем) UITabBarController должен быть на вершине иерархии представления (непосредственно в UIWindow) для правильного поворота и т. д., мой пример кода включает его (это может сэкономить вам время в будущем)
Это из-за разницы в высоте между более ранними iPhone и iPhone 5.
Вы можете решить это двумя способами:
Установите размер кадра вручную, когда вы работаете на iPhone 5.
BOOL isIphone5 = (([[UIDevice currentDevice] userInterfaceIdiom]
== UIUserInterfaceIdiomPhone) && (([UIScreen mainScreen].bounds.size.height) >= 568));
if(isIphone5)
{
[rootTabBarController.view setFrame:CGRectMake(0,0,320, 568)];
}
else{
[rootTabBarController.view setFrame:CGRectMake(0,0,320, 480)];
}
Или вы можете установить маски с автоматическим изменением размера для автоматического изменения размера вашего представления в соответствии с новыми размерами экрана или ориентациями (полезность автоматического изменения размера зависит от того, как определяются представления).
[rootTabBarController.view setAutoResizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];