popover сжимается в верхний левый угол, когда на iPad появляется клавиатура - PullRequest
4 голосов
/ 26 января 2012

Я работаю над приложением, которое имеет некоторые формы, содержащиеся в поповере. Моя проблема в том, что когда я нажимаю на любое поле ввода текста и появляется клавиатура, всплывающее окно сжимается в верхний левый угол экрана (0,0), и вы не видите поля, в которые вы вводите. Когда вы нажимаете кнопку «Скрыть клавиатуру», поповер возвращается к своему обычному размеру и положению.

Есть ли способ предотвратить изменение размера поповера при появлении клавиатуры?

Вот снимки экрана, если мое описание не подходит.

http://i.imgur.com/vHyJ5.jpg http://i.imgur.com/vtjCX.jpg

edit: Вот код для представления поповера на экране:

(void)displayPopoverForOrientation:(UIInterfaceOrientation)orientation {
if ([Utilities getAppDelegate].menuPopover) {
    CGRect rect = CGRectMake(0, 0, 0, 0);
    if (orientation == UIInterfaceOrientationLandscapeLeft ||
        orientation == UIInterfaceOrientationLandscapeRight) {
        if (self.currentPopover == RESERVATIONS_POPOVER) {
            rect = CGRectMake(365, 0, 0, 0);
        } else if (self.currentPopover == ACCOUNT_POPOVER) {
            rect = CGRectMake(600, 0, 0, 0);
        } else if (self.currentPopover == RESORTS_POPOVER) {
            rect = CGRectMake(0, 0, 0, 0);
        }
    }

    [[Utilities getAppDelegate].menuPopover presentPopoverFromRect:rect
                                                            inView:self.view 
                                          permittedArrowDirections:UIPopoverArrowDirectionUp 
                                                          animated:YES];
}
}

Внутри поповера находится отдельный контроллер вида с настройкой макета в xib. Не стесняйтесь задавать любые вопросы, я довольно новичок в iOS и Objective C, но я не новичок в кодировании, поэтому я сделаю все возможное, чтобы уточнить.

изменить 2: Я обнаружил, что это происходит только в iOS 5. В более старых версиях iOS всплывающее окно просто сворачивается вертикально, пока не будет достаточно места для клавиатуры. Есть идеи о том, почему это поведение изменилось в iOS 5?

Ответы [ 2 ]

3 голосов
/ 09 января 2014

На самом деле это очень возможно! ... Это связано с автоматическим изменением размера, установленным по умолчанию в IB:

Я разместил это на другом форуме с похожим вопросом. Решение для меня было:

1) Зайдите в дизайнер 2) Открытие XIB ViewController, который вызывает проблему (то есть PopOver). 3) Нажмите, чтобы выбрать его ПРОСМОТР. 4) Снимите флажок "AutoResizeSubviews" 5) При загрузке PopOver в коде убедитесь, что вы делаете: 6) Your_Popup_Window.popoverContentSize = Your_ViewController.view.bounds.size;

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

С уважением Хайдер Сати

2 голосов
/ 30 марта 2012

Невозможно предотвратить изменение формы всплывающего окна при появлении клавиатуры. Согласно Apple UIPopoverController документы:

Указанный вами размер является просто предпочтительным размером для представления всплывающего окна. Фактический размер может быть изменен для обеспечения того, чтобы всплывающее окно помещалось на экране и не сталкивалось с клавиатурой.

IOS попытается убрать его с дороги, но это может оказаться невозможным, в зависимости от того, откуда вы его представляете. Для достижения наилучших результатов, представьте его с помощью кнопки панели или из вида прокрутки (UITableView в порядке), и спроектируйте свой пользовательский интерфейс таким образом, чтобы всплывающее окно не было слишком большим (если всплывающее окно охватывает большую часть экрана, возможно, вам следует рассмотреть модальное представление или подобное). Я обнаружил, что мне нужно нарисовать несколько диаграмм, чтобы лучше понять схему, прежде чем я смог найти решение, которое работало во всех случаях.

...