Установить размер UIPopOverController - PullRequest
5 голосов
/ 21 июля 2011

У меня есть view с кучей кнопок в UIScrollView.Когда пользователь нажимает кнопку, я хочу, чтобы UIPopOverController отображал указатель на выбранную кнопку.Это вроде работает, но поповер имеет неправильный размер и указывает на случайную точку в представлении.Вот мой код.

-(void)detail:(id)sender{
    UIButton *button = sender;
    NSLog(@"tag = %i", button.tag);

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    self.popover = [[UIPopoverController alloc] initWithContentViewController:navController];
    self.popover.delegate = self;
    [self.popover presentPopoverFromRect:button.bounds inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

Чем проблема с размером поповера: В представлении, которое находится внутри поповера, у меня есть:

self.contentSizeForViewInPopover = scroll.contentSize;
NSLog(@"%f, %f", scroll.contentSize.height, scroll.contentSize.width);
NSLog(@"showing: %f, %f",  self.contentSizeForViewInPopover.height,  self.contentSizeForViewInPopover.width);

и оба журнала совпадают,Поэтому я думаю, что все должно работать правильно.Но это не так.Вот снимок экрана.Дайте мне знать, если вам нужно больше моего кода.Заранее спасибо.

screen shot of the error

Ответы [ 2 ]

23 голосов
/ 21 июля 2011

Первое, что я заметил, это то, что вы должны использовать button.frame, а не button.bounds для прямоугольника из .Разница между этими UIView свойствами:

Геометрия вида определяется его рамкой, границами и свойствами центра.Свойство frame определяет происхождение и размеры представления в системе координат его суперпредставления и обычно используется во время компоновки для настройки размера или положения представления.

Свойство bounds определяет внутренние размеры представлениякак он их видит и используется почти исключительно в пользовательском коде чертежа.

Вы можете установить высоту вашего popover контроллера, используя его setPopoverContentSize message:

// so something like this ...
[self.popover setPopoverContentSize:CGSizeMake(320, 460)];
// and to bind the popover to your button 
[self.popover presentPopoverFromRect:button.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
1 голос
/ 24 июля 2011

Относительно размера только всплывающего окна: мне удалось сделать это с переменной UILabel с высотой переменной:

UILabel *hinweis;
hinweis.text = @"...";
hinweis.frame = CGRectMake(x,y,width,800);
[hinweis sizeToFit];

И для стрелки: вы пробовали другой параметр inView, такой как self.parentViewController.view?

...