центрирование uipopover в iPad - PullRequest
13 голосов
/ 19 ноября 2010

Я бы хотел создать новую клавиатуру для iPad.

Я разработал представление, в котором есть ключи и вся основная работа для заполнения текстового поля, когда пользователь нажимает клавиши, и передает значение обратно в вызывающую процедуру, когда пользователь нажимает кнопку возврата.

Все это работает нормально.

Теперь - я хочу создать это представление как поповер.

Основные операции завершены (всплывает и закрывается)

Но теперь мне нужна помощь в тонкой настройке.

Вот мои вопросы ...

1) Как создать всплывающее окно с центром на экране без выделения UIPopoverArrowDirectionAny?

2) Убедитесь, что размер всплывающего окна соответствует размеру, который я создал в файле XIB (в настоящее время он изменяет размеры и удаляет часть самого правого размера окна)

Спасибо
Тони

Ответы [ 3 ]

57 голосов
/ 22 февраля 2011

Чтобы представить его без стрелок, передайте 0 для "allowArrowDirections":

[popOverController presentPopoverFromRect:rect inView:view permittedArrowDirections:0 animated:YES];

Чтобы отцентрировать его, передайте прямоугольник 1x1, расположенный в центре вашего вида:

CGRect rect = CGRectMake(viewWidth/2, viewHeight/2, 1, 1);
[popOverController presentPopoverFromRect:rect inView:view permittedArrowDirections:0 animated:YES];

Тогда у вас будет всплывающее окно без центрирования и стрелки.

Бит об удалении стрелки может сломаться в любой момент.Они не предоставили опцию UIPopoverArrowDirectionNone по какой-либо причине, они могут выбрать исключение в будущем, когда передается 0, или значение по умолчанию для чего-либо.Используйте его на свой страх и риск.

0 голосов
/ 14 августа 2014

Я только что работал над этим, но хотел сделать как можно больше на раскадровке, что немного меняет подход:

1) Выберите поповер на раскадровке и снимите отметку./ Вниз / Влево / Вправо, чтобы избавиться от стрелок.

Чтобы отцентрировать его на экране переопределения, подготовьтесь к переходу и сделайте что-то вроде этого:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIStoryboardPopoverSegue* popover = (UIStoryboardPopoverSegue*)segue;
    CGFloat horizontalInset = (self.view.frame.size.width - popover.popoverController.popoverContentSize.width) / (CGFloat)2.0;
    CGFloat verticalInset = (self.view.frame.size.height - popover.popoverController.popoverContentSize.height) / (CGFloat)2.0;
    popover.popoverController.popoverLayoutMargins =
        UIEdgeInsetsMake(
            verticalInset,
          horizontalInset,
            verticalInset,
          horizontalInset);
}

В моем случае я также обнаружил, чторадиус угла поп-сегмента не соответствовал моему дизайну, поэтому я изменяю цвет фона, чтобы очистить, чтобы разобраться, т.е. добавьте это к блоку выше:

popover.popoverController.backgroundColor = [UIColor clearColor];

2) В контроллере назначения для поиска segueатрибут «Popover» и отметьте «Использовать явный размер» и укажите размер, который вы хотите, чтобы он отображался в режиме всплывающего окна.

0 голосов
/ 13 января 2011

Если вы используете UIPopoverController, у него будет стрелка.Вот ваш выбор.

UIPopoverArrowDirectionAny  
UIPopoverArrowDirectionUp
UIPopoverArrowDirectionDown
UIPopoverArrowDirectionLeft
UIPopoverArrowDirectionRight

Как вы можете видеть, UIPopoverArrowDirectionNone

отсутствует. Что касается размера XIB, в вашем методе ViewDidLoad файла реализации вы можете установить следующее.1006 *

self.contentSizeForViewInPopover = CGSizeMake(320.0, 360.0);

Вы можете установить размер для всплывающего окна любым удобным для вас способом.

...