Ответ 1
установить contentSizeForViewInPopover
в ViewDidLoad
метод в HomeViewController
У меня есть UIViewController
, называемый HomeViewController
, и у него есть модель, содержащая массив данных. HomeViewController
также имеет кнопку, которая при нажатии отображает UITableViewController
, который отображает модельный массив данных.
Мой вопрос: какой стандартный/лучший способ установить размер popover? Я хочу, чтобы popover был достаточно высоким, чтобы отображать данные, но не выше. Что такое обычная практика? Я предполагаю, что мне нужно установить contentSizeForViewInPopover
в какой-то момент, но я не уверен, где... В методе viewDidLoad
класса popover? В методе prepareForSegue
?
Вот код, который у меня есть до сих пор: (Обратите внимание, что DataPresentingViewController
- мой класс контроллера popover view)
//In HomeViewController
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.destinationViewController isKindOfClass:[DataPresentingViewController class]])
{
DataPresentingViewController *dest = (DataPresentingViewController *) segue.destinationViewController;
dest.mySavedData = self.myModel.mySavedData;
}
}
Я знаю, что могу просто установить contentSizeForViewInPopover
здесь в методе prepareForSegue
; однако это похоже на то, с чем должен справиться класс popover.
установить contentSizeForViewInPopover
в ViewDidLoad
метод в HomeViewController
В iOS7 contentSizeForViewInPopover
устарела. Вместо этого вы должны использовать свойство UIViewController
preferredContentSize
.
Надеюсь, это поможет!
contentSizeForViewInPopover
устарел в iOS 7
Свойство: popoverContentSize
для UIPopoverController представляет размер представления содержимого, который управляется контроллером представления в свойстве contentViewController для UIPopoverController.
Reference
Преимущество в том, что оно доступно в iOS 3.2 и более поздних версиях, поэтому вам не нужно каждый раз проверять версию устройства, просто замените метод contentSizeForViewInPopover
на экземпляр объекта UIPopOverController.
Наткнулся на ваш вопрос сегодня. Вы поняли это?
Вы пробовали:
setPopoverContentSize:<#(CGSize)#> animated:<#(BOOL)#>
в вашем блоке логики segue. Полезно, если вы хотите, чтобы размер popover был переменным на основе набора данных или места размещения или любого другого.
хорошо.
//self.contentSizeForViewInPopover = CGSizeMake (320.0, 600.0);//Устаревший в ios7
self.preferredContentSize = CGSizeMake (320.0, 600.0);//используется вместо этого
Похоже, вы хотите сделать это программно, но в раскадровке, прежде чем подключить контроллер вида к segue, под инспектором атрибутов есть "popover, используйте параметр с явным размером". Возможно, вы можете установить размер, который будет работать лучше всего для вашего приложения, и не беспокоиться о размере с помощью кода. Надеюсь, это поможет, сообщите нам, как это происходит.
Попробуйте использовать следующий код:
- (IBAction)setData:(id)sender
{
UIViewController *popoverContent=[[UIViewController alloc] init];
UITableView *tableView=[[UITableView alloc] initWithFrame:CGRectMake(265, 680, 0, 0) style:UITableViewStylePlain];
UIView *popoverView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)];
popoverView.backgroundColor=[UIColor whiteColor];
popoverContent.view=popoverView;
popoverContent.contentSizeForViewInPopover=CGSizeMake(200, 420);//setting the size
popoverContent.view=tableView;
tableView.delegate=self;
tableView.dataSource=self;
self.popoverController=[[UIPopoverController alloc] initWithContentViewController:popoverContent];
[self.popoverController presentPopoverFromRect:CGRectMake(400, 675, 0, 0) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
}
Малоизвестный трюк для определения размера UIPopoverViewController
в соответствии с высотой вашего UITableView
заключается в использовании метода tableView rectForSection
, чтобы дать вам высоту. Используйте высоту в вашем viewController contentSizeForViewInPopover
следующим образом:
- (CGSize)contentSizeForViewInPopover {
// Currently no way to obtain the width dynamically before viewWillAppear.
CGFloat width = 200.0;
CGRect rect = [self.tableView rectForSection:[self.tableView numberOfSections] - 1];
CGFloat height = CGRectGetMaxY(rect);
return (CGSize){width, height};
}