Я считаю, что это ошибка в коде Apple. Тщательно поработав с UIPopoverControllers, я обнаружил, что во многих случаях всплывающее окно путается в том, есть ли у него панель навигации при выполнении расчетов размеров.
Я уверен, что если вы измерите высоту белого поля, вы обнаружите, что оно ровно 37 пикселей: высота панели навигации в всплывающем окне. (Панели навигации в всплывающих окнах не имеют высоту 44 пикселя, как большинство контроллеров навигации, поскольку они встроены в границу всплывающего окна.)
Если вы смогли получить доступ к серому наложению и вручную изменить его размер, вы могли бы учитывать высоту панели навигации или ее отсутствие. К сожалению, вы находитесь в затруднительном положении, поскольку наложение контролируется строкой поиска.
Мое предложение состоит в том, чтобы попытаться заставить поповер пересчитать размер его содержимого после его появления или изменения размера. Я использую этот шаблон при динамическом изменении размера UIPopover, содержащего панель навигации, когда он появляется:
// UIViewController subclass with a navigation bar which is displayed in a popover
// _popoverController is a (unretained) pointer to the UIPopoverController in which this view controller is displayed
- (void)viewDidLoad
{
[self.view sizeToFit];
CGSize newSize; // Dynamically computed based on popover contents
self.contentSizeForViewInPopover = newSize;
newSize.height += 37; // Account for popover navigation bar
[_popoverController setPopoverContentSize:size animated:YES];
}
Я не знаю, насколько этот ответ поможет, но я надеюсь, что он, по крайней мере, даст вам толчок в правильном направлении.