2010-03-27 4 views
0

Я создал подкласс UIViewController и понял, что реализация -loadView по умолчанию в UIViewController будет игнорировать мои настройки размера кадра странным образом.Почему мои контроллеры просмотра не квадратичны?

Чтобы упростить это и убедиться, что это действительно не ошибка моего кода, я сделал чистый тест с простым экземпляром UIViewController напрямую, вместо того, чтобы создавать подкласс. Результат тот же. Я пытаюсь сделать точно квадратный вид 320 х 320, но появляется вид как 320 х 200.

iPhone OS 3.0, пожалуйста, проверьте это:

UIViewController *ts = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
ts.view.frame = CGRectMake(0.0f, 0.0f, 320.0f, 320.0f); 
ts.view.backgroundColor = [UIColor cyanColor]; 
[self.view addSubview:ts.view]; 

, как вы можете видеть, я это делаю :

1) Создать экземпляр UIViewController

2) Установить рамку зрения квадратичной размерности 320 х 320

3) придать ему цвет, так что я могу ей ee it

4) Добавил его в качестве подсмотра.

Теперь часть, что еще более странно: Когда я делаю свою собственную реализацию -loadView, то есть, если я ставлю этот код там, как это:

- (void)loadView { 
    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 320.0f)]; 
    v.backgroundColor = [UIColor cyanColor]; 
    self.view = v; 
    [v release]; 
} 

, то она выглядит.

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

Так почему же я получаю эту странную ошибку? Прямо сейчас я не вижу другого способа возиться так, чтобы исправить это неправильное поведение. Я не активировал ничего подобного clipToBounds, и нет другого кода, касающегося этого.

ответ

1

Невозможно изменить размеры вида контроллера вида. Он должен быть авторизован, чтобы соответствовать размеру окна или родительского контроллера.

Если вам действительно нужен квадратный вид, сделайте подкласс.

// Note: better do this in -loadView or -viewDidLoad. 
    UIView* container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)]; 
    [ts.view addSubview:container]; 
    [container release]; 
    // add stuff into the container view. 
    // ... 
+0

Apple отклонит мое приложение, если вручную изменю размер представления контроллера вида? – dontWatchMyProfile

+0

@mystify: Нет. Просто для вас сложно программировать, потому что диспетчер представлений может изменить размер представления каким-то неизвестным способом. – kennytm

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