2012-02-18 2 views
2

Я не могу понять, почему этот вид занимает весь экран.Размер UIView не соответствует

В AppDelegate файле

...

self.viewController = [[[ViewController alloc]init]autorelease]; 
[self.window setRootViewController:self.viewController]; 
self.window.backgroundColor = [UIColor whiteColor]; 

..

В ViewController.m

UIView *view = [[UIView alloc]initWithFrame:CGRectMake(30, 30, 30, 30)]; 
[view setBackgroundColor:[UIColor greenColor]]; 
self.view = view; 

При запуске приложения на экране полностью зеленый вместо имея только квадрат в зеленом цвете. Что здесь не так?

+0

где вы задаете 'self.view = view'? –

+0

Я не могу понять, что вы просите. – OhDoh

+0

Где у вас второй фрагмент кода? В методе loadView? Но, как предложил Ричард Дж. Росс III, возможно, вам нужно использовать (например) '[self.window addSubview: view];' –

ответ

5

Ошибочная линии здесь:

self.view = view; 

При установке вида UIViewController, который является корневым контроллером, он гарантированно заполняет экран. Вместо этого добавьте его в качестве подсмотра:

[self.view addSubview:view]; 

И все должно быть в порядке.

+0

Когда я перехожу на [self.view addSubview: view] сбой приложения, и я получаю «Не удалось восстановить ранее выбранный кадр "в gdb – OhDoh

0

Контроллер вида автоматически управляет размером с корневым представлением (self.view), поэтому, даже если вы инициализируете его меньшим размером, он будет позже изменен, чтобы заполнить экран. Это изменение размера удобно также происходит при изменении ориентации интерфейса (см. Ответ this question).

Как было предложено ответом Ричарда, вы можете добавить свой зеленый вид в виде подсмотра в корневой режим контроллера. Вероятно, сбой произошел из-за того, что корневой вид еще не существует, когда вы пытаетесь получить к нему доступ. Попробуйте следующее:

- (void) loadView 
{ 
    [super loadView]; // creates the root view 

    UIView* subView = [[UIView alloc] initWithFrame:CGRectMake(30, 30, 30, 30)]; 
    [subView setBackgroundColor:[UIColor greenColor]]; 
    // because you don't set any autoresizingMask, subView will stay the same size 

    [self.view addSubview:subView]; 
} 
Смежные вопросы