HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – Popover控制背景颜色奇怪的行为大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以在我的应用程序中,我有一个带有嵌入式导航控件的弹出控件.在导航堆栈的不同部分,我希望弹出窗口是不同的颜色,具体取决用户的位置.奇怪的是有时候设置popover背景颜色使得这个看起来很糟糕的盒子,有时它不会.它看起来像这样

这是我想要的外观:

似乎如果我在显示弹出窗口之前更改背景颜色,它似乎正常工作并转换,但如果我在显示之前没有设置弹出窗口颜色,则在显示它具有框效果后更改它.我还注意到其他似乎随机发生的情况,但我无法解释导致它的原因(我的真实应用程序比这个演示要复杂得多).这是相关代码

- (IBACtion)buttonPressed:(id)sender {
    UIViewController *vc = [[UIViewController alloc] init];
    UIButton *b = [[UIButton alloc] init];
    [b addTarget:self action:@SELEctor(innerButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    [b settitle:@"Button" forState:UIControlStateNormal];
    [b settitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [b setFrame:CGRectMake(0,100,100)];
    [vc.view addSubview:b];
    _innerNav = [[UINavigationController alloc] initWithRootViewController:vc];
    _popOver = [[UIPopoverController alloc] initWithContentViewController:_innerNav];

    //If this line is here,everything works fine
    _popOver.BACkgroundColor = [UIColor yellowColor];

    [_popOver presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

    //If this line is here (and the above line is commented out),the transition will look wrong
    //_popOver.BACkgroundColor = [UIColor yellowColor];
}

-(void)innerButtonPressed {
    _controller = [[UIViewController alloc] init];
    UIButton *b = [[UIButton alloc] init];
    [b addTarget:self action:@SELEctor(test) forControlEvents:UIControlEventTouchUpInside];
    [b settitle:@"Make Purple" forState:UIControlStateNormal];
    [b settitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [b setFrame:CGRectMake(0,200,200)];
    [_controller.view addSubview:b];
    [_popOver setBACkgroundColor:[UIColor orangeColor]];
    [_innerNav pushViewController:_controller animated:YES];
}

-(void)test{
    _popOver.BACkgroundColor = [UIColor purpleColor];
}

知道是什么导致了这个问题吗?什么步骤安全地更新弹出窗口的背景颜色而不进入这种状态?我有一个完整的项目来证明这个问题,我认为你可以将项目附加到问题上,但显然你不能.如果有人想要它我可以在某个地方托管它.

解决方法

在查看了您的示例项目,Apple的 “Popover Controllers in iOS”示例项目,仔细阅读 Apple’s Documentation,并尝试了一些不同的事情后,我得出了以下观察结果:

> UIPopoverController仅在显示BACkgroundColor属性的有效值时才显示此奇怪行为.由此我猜测,因为UIPopoverController的BACkgroundColor属性认为nil,所以必须使用与BACkgroundColor属性有效时不同的绘图代码.
>触发某种重绘(e.x.设置popoverContentSizE)将使彩色框叠加消失(看起来它会剪切彩色图层).

结论:暂时我会在呈现UIPopoverController之前设置BACkgroundColor,然后根据需要更新它.如果这不是一个选项,请尝试更新UIPopoverController,使其重绘(作为注释:我无法让它看起来很好,而且看起来很糟糕).最后,我会report it as a bug去苹果.

我希望这有帮助.

大佬总结

以上是大佬教程为你收集整理的ios – Popover控制背景颜色奇怪的行为全部内容,希望文章能够帮你解决ios – Popover控制背景颜色奇怪的行为所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。