UIPopoverController, изменяющий расположение UIPopoverArrowDirection - PullRequest
5 голосов
/ 23 марта 2011

Я хочу переместить UIPopoverArrowDirection влево так, чтобы действительная стрелка была больше не по центру, а больше на 25% слева и на 75% справа.

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

Normal Popover

The Popover with correctly placed arrow that I want

Проблема в том, что нет реального способакопаться в классе поповер ...

Ответы [ 3 ]

7 голосов
/ 30 марта 2011

Это уже можно сделать с помощью встроенного класса, указав «presentPopoverFromRect» и сделав этот прямоугольник достаточно ограниченным.

example doing this

Ниже приведен код, взятый прямо из кода, который приводит к приведенному выше. Дополнительный пух, потому что маленькая зубчатая вещь находится в UIToolbar в UINavigationBar. r - это рамка UIToolbar, и она настроена так, чтобы попасть в нужное место (для стрелки), иначе она будет немного смещена от центра. MGSettingsView - это контроллер вида (с «Включить переходы», «Включить ночной режим» и т. Д.).

UINavigationItem *item = scrollView.navbar.topItem;
UIToolbar *authorTools = (UIToolbar *)[item.rightBarButtonItem customView];
CGRect r = authorTools.frame;
r.size.width = 18;
r.origin.x += 12;

CGSize popoverSize = CGSizeMake(300.f, 500.f);
MGSettingsView *settingsView = [[MGSettingsView alloc] initWithSize:popoverSize];
UIPopoverController *poctl = [[UIPopoverController alloc] initWithContentViewController:settingsView];
settingsView.popover = poctl;
poctl.delegate = self;
poctl.popoverContentSize = popoverSize;
[poctl presentPopoverFromRect:r inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[settingsView release];

Если это не то, что вы просите, вам лучше перефразировать ваш вопрос, я думаю. :)

1 голос
/ 23 марта 2011

Класс UIPopoverController предоставляет простой способ отображения содержимого из координат (Rect).У вас есть возможность установить popoverArrowDirection, который вы хотите авторизовать, и все.Исходя из этой информации, система автоматически отобразит всплывающее окно, чтобы оно поместилось на экране и соответствовало нужным директивам, вы не можете просить больше.

0 голосов
/ 23 марта 2011

Проверьте ниже метод в этом вы можете дать прямоугольник для направления arrowDirections.

- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated
...