2016-09-24 3 views
0

Я показываю свой popOverController для iPhone и iPad в коде ниже.iOS: проблема с автоопределением и popOverController (возможная ошибка Xcode)

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

if ([UIDevice currentDevice].userInterfaceIdiom == 
    UIUserInterfaceIdiomPad) { 
    vc.preferredContentSize = CGSizeMake(296, 476); //your custom size. 
} else { 
    vc.preferredContentSize = CGSizeMake(252, 436.5); 
} 

vc.modalPresentationStyle = UIModalPresentationPopover; 
vc.popoverPresentationController.delegate = self; 
vc.popoverPresentationController.sourceView = self.view; 
vc.popoverPresentationController.sourceRect = CGRectMake(screenWidth/2, self.view.height/2, 1, 1); 

[self presentViewController:vc animated:YES completion:nil]; 

UIPopoverPresentationController *popOverController = vc.popoverPresentationController; 
popOverController.permittedArrowDirections = 0; 

Однако, похоже, возникает проблема с размером класса. Кажется, что размер iPhone используется, а не размер iPad вообще даже при работе iPad-устройства. Несмотря на то, что в построителе интерфейса он отображает два разных размера для кнопок в зависимости от выбранного устройства.

Редактировать: Например, у меня есть viewcontroller.xib с кнопками. Существуют два разных размера кнопок в зависимости от фактического устройства. На iPhone кнопки имеют размер 50 x 50. На iPad он имеет размер 430 x 430. В построителе интерфейса это отображается правильно. Однако при запуске iPad-устройства кнопки отображаются как 50 x 50, если предполагается, что они составляют 430 x 430.

+0

Что вы подразумеваете под «размером»? На iPhone вы даже не увидите popover; вы увидите полноэкранный представленный контроллер представления. Итак, как вы знаете, что такое «размер»? Пожалуйста, покажите скриншоты. – matt

+0

Например, у меня есть viewcontroller.xib, у которого есть кнопки. Существуют два разных размера кнопок в зависимости от фактического устройства. На iPhone кнопки имеют размер 50 x 50. На iPad он имеет размер 430 x 430. В построителе интерфейса это отображается правильно. Однако при запуске iPad-устройства кнопки отображаются как 50 x 50, когда предполагается, что они составляют 430 x 430. И у меня также есть popover на iPhone. – Weakman10122

+0

Хорошо, теперь я понимаю. – matt

ответ

2

Условные ограничения в использовании раскадровки классы размера.

Горизонтальный размер класса на представленном представлением контроллере просмотра на iPad компактен, как на iPhone. Вот почему вы видите размер iPhone для кнопок.

Чтобы убедиться, что это правда, переопределите viewDidAppear: в вашем классе ViewController для NSLog self.traitCollection. Вы увидите, что класс горизонтального размера Compact.

Это имеет смысл, потому что popover похож на iPhone-размер окна, появляющегося на iPad. Фактически, это целое пункт popover.

+0

Есть ли способ иметь две разные кнопки размера для iPhone и iPad, не прибегая к использованию нескольких xib-файлов (я использую xib). Кроме того, я собираюсь вручить вам правильный ответ. – Weakman10122

+0

Да, я думаю. Вы можете сказать контроллеру презентации, чтобы он лежал в popover и сказал, что коллекция признаков имеет обычную ширину. https://developer.apple.com/reference/uikit/uipresentationcontroller/1618335-overridetraitcollection?language=objc – matt

+0

Это прекрасно работает до сих пор. Огромное спасибо. – Weakman10122

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