在iOS 8上旋转后,UIPopoverController backgroundColor恢复为默认值

时间:2014-10-02 01:24:43

标签: ios objective-c ipad uipopovercontroller

backgroundColor设置为[UIColor blackColor]UIPopoverController时,一切正常并在iOS7和iOS8上正确显示。

我通过

呈现
    [aPopover presentPopoverFromBarButtonItem:self.navigationItem.rightBarButtonItem
                     permittedArrowDirections:UIPopoverArrowDirectionAny
                                     animated:YES];

设备旋转后,弹出窗口backgroundColor将重置为默认颜色(在这种情况下为白色)。

在iOS 7中不会发生这种情况。仅限iOS 8

我已经尝试了

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

并使用UIPopoverControllerDelegate重新定位并出现同样的问题。

最后信息:仅在UINavigationBar上显示popover时出现此问题,但在常规UIView或任何UIButton上显示时不会出现此问题。

感谢您的帮助

3 个答案:

答案 0 :(得分:7)

iOS8上的popover也遇到了这样的问题。除了旋转之外,当弹出窗口改变其大小时(例如,当键盘显示为编辑弹出窗口中的某些文本字段时),重置背景颜色。 关键的观察结果是,问题通常发生在弹出窗口上,箭头位于内容的边缘(当从全屏视图控制器的UIBarButtonItem呈现弹出窗口时就是这种情况)。 因此,我的解决方法是修改sourceRect,使弹出框的箭头远离其角落。例如,在我的特定情况下,我有一个带有自定义33x33视图的条形按钮项目(用作sourceView),并通过将sourceRect设置为{20, 30, 0, 0}而不是自定义视图来解决问题&# 39; s界限(虽然我认为确切的所需偏移量可能取决于弹出窗口的大小)。

答案 1 :(得分:0)

对于iOS 8.2(xcode 6.2):打开键盘时出现问题,popovercontroller变为白色。键盘消失后,它也与白色背景相同。

我使用以下代码来解决我的问题。

AccountType

答案 2 :(得分:0)

我在iOS 9.1中也遇到过这个问题。偏移源矩形是一个很好的观察和解决方法,但对我来说,它似乎没有影响,直到偏移达到16左右,这意味着箭头看起来有点错位。

为避免这种情况,最后我使用GIKPopoverBackgroundView提供自定义背景视图(UIPopoverBackgroundView)。我从UIKit中提取了相关的popover背景图像(参见下面的[1]),以获得与iOS 9相同的popover形状,并根据我的需要修改它们的颜色。

笨拙的,有点繁琐地设置了图像的上限,但它确实有效。

[1]使用cartool从/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/UIKit获取_UIPopoverViewBlurMaskBackground *。框架/ Artwork.bundle / Assets.car