Ошибка со свойством фрейма UIView? - PullRequest
0 голосов
/ 11 февраля 2011

Я инициализирую новый объект UIViewCOntroller. затем пытаюсь установить позицию своего представления на сцене, но у меня возникли некоторые проблемы.

вот код, который я использую Примечание. Этот код помещается в метод viewDidLoad основного UIViewController приложения

.
UIViewController * cont = [[UIViewController alloc] init];  
    cont.view.backgroundColor = [UIColor redColor];  
    CGRect rect = CGRectMake(100, 0, 320, 480);  
    cont.view.frame = rect;  

этот код все еще позиционирует подпредставление в (0,0) вместо (100,0) Однако, если я введу десятичное число, например, используя 320.01 (для значения ширины) или 480.01 (для значения высоты). Вид будет располагаться правильно.

Кажется, что если я использую размер с точной шириной: 320.0, высота: 480.0, источник всегда будет установлен на (0,0) !!!

Это немного странно. Я надеялся, что кто-нибудь сможет объяснить, почему это происходит, и, возможно, как это можно решить.

Ура ...

Ответы [ 3 ]

1 голос
/ 11 февраля 2011

NSLog значение cont.view, и я думаю, вы найдете его равным нулю, что объясняет, почему ничего не происходит. Это не обычный способ создания UIViewController - это не неправильно для его создания программно, но 99,99% времени создаются подклассами UIViewController с основным UIView в файле .xib. Недавно созданный объект UIViewController имеет нулевой элемент «view», так что вам нужно как-то его инициализировать, либо загрузив .xib:

MyViewController *vc = [[[MyViewController alloc] initWithNibName@"MyViewController" bundle:nil] autorelease];

или создание представления вручную:

MyViewController *vc = [[[MyViewController alloc] init] autorelease];
UIView *theView = [[[UIView alloc] initWithFrame:viewframe] autorelease];
vc.view = theView;

Затем вы можете переместить рамку представления в соответствии с вашими пожеланиями, но перемещение базового представления контроллера представления обычно не то, что вы хотите сделать, вы хотите создать подэлементы и переместить их.

0 голосов
/ 11 февраля 2011

Я думаю, что вы должны быть в состоянии использовать

-(void) loadView { 
  [super loadView];
  //create your views programmatically here
}

для того, чтобы создать ваш viewController программно и избежать IB. Обычно IB вызывает этот метод для вас, когда ваше свойство view равно nil, однако, если вы этого не сделаете, IB обязательно включите вышеуказанный метод, чтобы свойство view не было nil.

0 голосов
/ 11 февраля 2011

[[UIViewController alloc]init] неверно.Назначенный инициализатор для UIViewController: initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle.Даже это не обязательно сразу инициализирует выход view для реального UIView.Вам необходимо создать подкласс UIViewController и выполнить настройку в методе viewDidLoad этого подкласса.

Тем временем вполне вероятно, что view равен nil, поэтому вы можете попробовать установить любые свойства, которые вам нравятся безвсе, что когда-либо происходило.

...