【问题标题】:UIPopoverController backgroundColor back to default after rotation on iOS 8UIPopoverController 背景颜色在 iOS 8 上旋转后恢复为默认值
【发布时间】:2014-11-26 23:44:48
【问题描述】:

当将 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 上显示弹出框时遇到此问题,但在常规 UIView 或任何 UIButton 上显示弹出框时没有。

感谢您的帮助

【问题讨论】:

  • 我得到了同样的行为。有没有运气找到解决方案?

标签: ios objective-c ipad uipopovercontroller


【解决方案1】:

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

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

笨手笨脚,并且为图像设置帽子插图有点繁琐,但它成功了。

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

【讨论】:

    【解决方案2】:

    对于 iOS 8.2 (xcode 6.2):我在打开键盘时遇到问题,popovercontroller 变成白色。键盘消失后也变成了白色背景。

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

    [objPopovercontroller presentPopoverFromRect:CGRectOffset(CGRectMake(SCREEN_WIDTH-40, 60, 0, 0), -1, 0) 
                                          inView:self.view 
                        permittedArrowDirections:UIPopoverArrowDirectionUp 
                                        animated:YES]; 
    
    // SCREEN_WIDTH = (IS_IPAD?1024:[UIScreen mainScreen].bounds.size.width)
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我发现如果视图的位置是这样的遇到。例如。箭头就在边缘,没有圆角。将其从边缘偏移一个像素即可为我修复:sourceRect = CGRectOffset(buttonRect, -1, 0);
      猜你喜欢
      • 1970-01-01
      • 2016-04-27
      • 2020-12-24
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      相关资源
      最近更新 更多