2013-05-26 3 views
0

Я добавляю UIImageView в UIView UIViewController, как обычно, с рамкой изображения, равной self.view, чтобы убедиться, что изображение будет охватывать весь вид. Тем не менее, есть примерно 20px отступы между строкой состояния и изображением, от которого я не могу избавиться.Проблема выбора размера фона UIView

Я пытался NSLogging различные кадры, и получать следующие результаты:

NSLog(@"ImageView => %@", NSStringFromCGRect([imageView frame])); 
NSLog(@"self.view => %@", NSStringFromCGRect(self.view.frame)); 
NSLog(@"Screen Bounds => %@", NSStringFromCGRect([[UIScreen mainScreen] bounds])); 
NSLog(@"App window => %@", NSStringFromCGRect([[[[UIApplication sharedApplication] delegate] window] frame])); 

[LaunchViewController.m: line 26] ImageView => {{0, 0}, {320, 548}} 
[LaunchViewController.m: line 27] self.view => {{0, 0}, {320, 548}} 
[LaunchViewController.m: line 28] Screen Bounds => {{0, 0}, {320, 568}} 
[LaunchViewController.m: line 29] App window => {{0, 0}, {320, 568}} 

Результаты показывают, что вид изображения на самом деле должно быть покрытие self.view без заполнения вообще между собой и в строке состояния ,

UIViewController - это контроллер корневого представления UINavigationController, и я установил, что панель навигации скрыта. Я подумал, что, возможно, это может вызвать проблему, однако, удалив UINavigationController и заменив его только UIViewController, заполнение все еще было.

У кого-нибудь есть какие-либо советы по удалению прокладки/имеет эту проблему раньше и есть исправление?

Вот изображение, показывающее, что происходит - зеленая область - UIView (self.view), а оранжевая область - UIImageView.

enter image description here

[self.navigationController setNavigationBarHidden:YES]; 
[self.view setBackgroundColor:[UIColor greenColor]]; 

UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.frame]; 
[imageView setImage:[UIImage imageNamed:@"[email protected]"]]; 
[self.view addSubview:imageView]; 
+0

Вы делаете это на viewDidLoad или viewDidAppear? – Bartu

+0

-viewDidLoad - перед вызовом супер. –

+0

попробуйте переместить его в viewDidAppear, в viewDidLoad, если вы используете xib, размер представления основан на представлении xib. – Bartu

ответ

1

В делегат своего приложения установить FullScreenLayout на YES только, прежде чем сделать это контроллером вида контроллера вида корня:

ViewController *vc = [[ViewController alloc] init]; 
[vc setWantsFullScreenLayout:YES]; 
[[self window] setRootViewController:vc]; 

или вы можете установить его в viewDidLoad

[self setWantsFullScreenLayout:YES]; 

Сводка по setWantsFullScreenLayout: Когда контроллер представления представляет свое представление, он обычно сжимает это представление так, чтобы его кадр не перекрывал статус устройства ba р. Установка этого свойства в YES приводит к тому, что диспетчер представлений будет изменять свой вид так, чтобы он заполнял весь экран, включая область под строкой состояния. (Конечно, для этого нужно, чтобы окно, на котором размещалось устройство просмотра, должно было быть размером, чтобы заполнить весь экран, включая область под строкой состояния.) Обычно вы должны установить это свойство в YES в случаях, когда у вас есть полупрозрачный статус bar и хотите, чтобы содержимое вашего представления было видимым за этой точкой зрения. От here

Надеюсь, что это поможет.

0

Попробуйте UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; isntead. Использование bounds вместо frame

+0

Нет разницы ... –

+0

Не пытайтесь установить изображение и вместо этого установите backgroundColour вашего изображения, чтобы вы могли быть уверены в кадре, который используете. – Remover

-1

Попробуйте изменить self.view.frame на self.view.bounce при добавлении изображения в self.view.

UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.frame]; 

Или просто использовать CGRectMake (0,0,320,568)

+0

Нужно быть динамичным, я боюсь. Приложение будет работать не только на iPhone 5. –

+0

это заставляет CGRect, а не решение. Я уверен, что ОП мог бы разобраться в этом сам. Тем не менее он ищет, почему это происходит – Bartu

+0

http: // stackoverflow.com/questions/1054539/not-sure-why-uiview-is-being-nudged-up-by-around-10px – andykkt

0

на viewDidLoad метод XIB вашего UIViewController в загружаемой и ваших обновленных значений в отношении пользовательского интерфейса не обнаружен.

Это не вызывает проблем, если ваш UIView точно такой же (нет UINavigationBar, UITabbar, строки состояния или устройства -iPhone 3,5 дюйма/4 дюйма). Но если вы изменяете что-либо в этом процессе, вы можете получить ложные значения на viewDidLoad.

Самый простой способ проверить это - отладить экран и просмотреть границы на viewDidAppear после обновления пользовательского интерфейса.

Пожалуйста, проверьте ваш xib/раскадровку. Существует изменение между вашим текущим интерфейсом и разработанным интерфейсом.

Для решения этой проблемы вы можете использовать функцию updateUI на viewDidAppear и обновлять связанные виды еще раз.

[self.imageView setFrame:self.view.frame] 

это исправит.

+0

Я не использую ниб или раскадровку. –

1

Я была такая же проблема, и она решается с этим:

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 

self.view.frame дать вам неправильный x и y, когда строка состояния не hidden

+0

Если вы посмотрите на код, который я разместил, вы обнаружите, что кадр точно такой же. –

+0

self.view.frame дает неправильные x и y, когда строка состояния не скрыта, попробуйте и посмотрите – Mutawe

0

Try движение [self.navigationController setNavigationBarHidden: YES] ; в

- (void) viewWillAppear: (BOOL) animated 
{ 
    [super viewWillAppear: animated];  

    [self.navigationController setNavigationBarHidden: YES 
              animated: NO]; 
} 
1

См. Ваш self.view, это 20 пунктов ниже, поскольку отображается строка состояния. следовательно, self.view.frame является (0,20,w,h)

ваш взгляд изображение имеет тот же прямоугольник (0,20,w,h) и добавляет его в self.view. Что касается self.view, то представление изображения устанавливает его рамку на 20 пунктов ниже позиции «y» self.view.

Попробуйте установить self.view.bounds на изображение.

Надеюсь, это поможет!

Смежные вопросы