Подтвердить что ты не робот

Где установить размер popover?

У меня есть 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.

4b9b3361

Ответ 1

установить contentSizeForViewInPopover в ViewDidLoad метод в HomeViewController

Ответ 2

В iOS7 contentSizeForViewInPopover устарела. Вместо этого вы должны использовать свойство UIViewController preferredContentSize.

Надеюсь, это поможет!

Ответ 3

contentSizeForViewInPopover устарел в iOS 7
Свойство: popoverContentSize для UIPopoverController представляет размер представления содержимого, который управляется контроллером представления в свойстве contentViewController для UIPopoverController.
Reference

Преимущество в том, что оно доступно в iOS 3.2 и более поздних версиях, поэтому вам не нужно каждый раз проверять версию устройства, просто замените метод contentSizeForViewInPopover на экземпляр объекта UIPopOverController.

Ответ 4

Наткнулся на ваш вопрос сегодня. Вы поняли это?

Вы пробовали:

setPopoverContentSize:<#(CGSize)#> animated:<#(BOOL)#>

в вашем блоке логики segue. Полезно, если вы хотите, чтобы размер popover был переменным на основе набора данных или места размещения или любого другого.

хорошо.

Ответ 5

//self.contentSizeForViewInPopover = CGSizeMake (320.0, 600.0);//Устаревший в ios7

self.preferredContentSize = CGSizeMake (320.0, 600.0);//используется вместо этого

Ответ 6

Похоже, вы хотите сделать это программно, но в раскадровке, прежде чем подключить контроллер вида к segue, под инспектором атрибутов есть "popover, используйте параметр с явным размером". Возможно, вы можете установить размер, который будет работать лучше всего для вашего приложения, и не беспокоиться о размере с помощью кода. Надеюсь, это поможет, сообщите нам, как это происходит.

Ответ 7

Попробуйте использовать следующий код:

- (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];
}

Ответ 8

Малоизвестный трюк для определения размера 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};
}