UITabBarController дисплей

Я новичок в разработке iOS. Я разрабатываю приложение, которое использует контроллер панели вкладок. Я устанавливаю рамку для контроллера панели вкладок программно, но когда я переключаюсь на iPhone 5, между элементами панели вкладок и основным видом создается пустое пространство. Ниже приведен скриншот приложения на симуляторе iPhone 5.

Снимок экрана на 4.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];
Другие вопросы по тегам