iOS7中的presentPopoverFromRect和setPopoverContentSize问题

时间:2013-10-23 13:14:08

标签: ipad ios7 uipopovercontroller popover

为了让iOS7中的弹出框能够正常运行,似乎我必须做一些变通办法,在下面的代码中,我试图理解为什么第二次重新显示弹出窗口是必要的。如果在iOS7中没有重新显示,则箭头指向错误的位置(如果它们已打开)。通常应用程序在横向运行,所以我想知道这是否与动画的方向和时间有关。此外,如果没有重新显示,透明窗格会在弹出窗口滑入到位之前缩短约500毫秒以填充屏幕。通过重新显示,然后popover就像预期的那样快速进入正确的位置。

NSArray *currSysVer= [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];

if(self.showingKeyboard == NO) {
    if([[currSysVer objectAtIndex:0] intValue] > 6)
    {
        [selectPopover  presentPopoverFromRect:localField.frame inView:localField permittedArrowDirections:NO animated:NO];
    }
    else
    {
        [selectPopover  presentPopoverFromRect:localField.frame inView:localField permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }
}

//Determine height and width of popover to fit all values
CGFloat width = 320;

if(multiSelect) {
    width = 450;
}

for(NSString *value in values) {

    CGSize size = [value sizeWithFont:[UIFont systemFontOfSize:23]];

    if(size.width > width) {
        width = size.width;
    }
}

CGFloat height = (44 * [values count] + 1) > 800 ? 800 : 44 * [values count] + 1;

if([[currSysVer objectAtIndex:0] intValue] > 6) {
    height += 6;
}

[selectPopover setPopoverContentSize:CGSizeMake(width, height + 36) animated:NO];

if(self.showingKeyboard == NO && [[currSysVer objectAtIndex:0] intValue] > 6) {
    [selectPopover  presentPopoverFromRect:localField.frame inView:localField permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,无法找到解决方案,也无法找到原因。也许这是一个错误,也许不是。因为对我来说,如果我横向或纵向呈现弹出窗口并不重要,我使用了这种解决方法:

permittedArrowDirections:(UIPopoverArrowDirectionUp | UIPopoverArrowDirectionDown)

这种方式不会浮动,指向正确的位置。

希望这对某些人有所帮助。

答案 1 :(得分:0)

在您致电 setPopoverContentSize:之前,我真的很难理解您为什么要调用 presentPopoverFromRect:。我在我的应用中使用 UIPopoverController ,并且在显示弹出窗口之前总是设置内容大小。

您是否尝试修改代码以便计算弹出窗口的正确大小 - 然后在调用 presentPopoverFromRect:之前调用 setPopoverContentSize: