initWith Frame ?? CGRectMake - неверный размер XIB - PullRequest
0 голосов
/ 17 сентября 2011

В моем MainControllerClass у меня есть несколько XIB, которые я инициализирую и выкидываю на экран - вот пример

self.widgetPeopleToBuyFor = [[WidgetAddPeopleToBuyFor alloc] initWithNibName:@"WidgetAddPeopleToBuyFor" bundle:nil andUser:self.currentUser];
self.widgetPeopleToBuyFor.view.frame = CGRectMake(10,10,492,537);
self.widgetPeopleToBuyFor.delegate = self;
[self.viewMainView addSubview:self.widgetPeopleToBuyFor.view];
[self.viewMainView bringSubviewToFront:self.widgetPeopleToBuyFor.view];

if ([self.currentUser.wPeopleToBuyForRect length] > 2) {
    NSLog(@"LOADING FROM DB");
    CGRect rect9 = CGRectFromString(self.currentUser.wPeopleToBuyForRect);
    self.widgetPeopleToBuyFor.view.frame = rect9;
}
else
{
    NSLog(@"FIRST TIME");
    self.widgetPeopleToBuyFor.view.frame = CGRectMake(10,10,492,537);
}

Я создаю это приложение, чтобы пользователь мог изменить размер представления по своему желанию, переместить его и т. Д. Поэтому, когда он выходит из программы, я вызываю этот метод, чтобы получить информацию о просмотре.

- (NSString *) showInfoViewSize: (UIView *) view 
{
    return NSStringFromCGRect(view.frame);

}

Таким образом, оттуда я сохраняю информацию в базе данных, она сохраняется нормально - но я только что узнал, что размер не имеет значения - я мог бы изменить его на (10,10,200,200), и вид остался на том же точном размере на экране , Так что я знаю, что бросил там тебя. Но, в конце концов, БД работает нормально - оператор IF срабатывает - просто я не могу изменить размер XIB при запуске.

Должен ли я изменить его размер другим способом? Должен ли я отслеживать ТРАНСФОРМ от устройства распознавания и просто преобразовать его в масштабный фактор при загрузке? Кажется, мне это не нравится.

Любая помощь приветствуется - я бьюсь об этом, и держу пари, что-то супер простое, что мне не хватает.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2011

Обычно, когда что-то просто не работает , это потому, что у вас nil плавает где-то, чего вы не ожидали.Помните, что отправка сообщений на nil полностью допустима в ObjC (просто всегда возвращается nil).

Так что я бы прошел через это в отладчике и проверил все, чтобы убедиться, что это настоящий экземплярне nil.

Но в целом то, что вы делаете (alloc с контроллером с пером, настройкой кадра этого контроллера, затем добавлением представления контроллера в суперпредставление), является правильным способом сделатьэто.

0 голосов
/ 17 сентября 2011

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

измените view.frame в "viewWillAppear" в реализации вашего контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...