【发布时间】:2026-01-22 06:55:01
【问题描述】:
所以在我的应用程序中,我有一个带有嵌入式导航控件的弹出框控件。在导航堆栈的不同部分,我希望弹出框根据用户所在的位置呈现不同的颜色。奇怪的是,有时设置弹出框的背景颜色会使这个看起来很糟糕的框出现在它周围,有时却不会。它看起来像这样:
这是我想要得到的样子:
似乎如果我在显示弹出框之前更改背景颜色,它似乎可以正常工作和过渡,但如果我在显示之前没有设置弹出框颜色,然后在显示后更改它具有框效果.我还注意到它似乎是随机发生的其他情况,但我无法真正解释是什么原因造成的(我的真实应用程序比这个演示复杂得多)。以下是相关代码:
- (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,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,0,200,200)];
[_controller.view addSubview:b];
[_popOver setBackgroundColor:[UIColor orangeColor]];
[_innerNav pushViewController:_controller animated:YES];
}
-(void)test{
_popOver.backgroundColor = [UIColor purpleColor];
}
知道是什么导致了这个问题吗?什么步骤可以安全地更新弹出框的背景颜色而不进入这种状态?我有一个完整的项目来展示这个问题,我认为你可以将项目附加到问题上,但显然你不能。如果有人想要它,我可能可以在某个地方托管它。
【问题讨论】:
-
您是否在模拟器或设备(或两者)上看到此问题?
-
我在模拟器和设备上都看到了这个
-
如果您将项目托管在某个地方,我将下载它并查看是否遇到同样的问题。我没有任何确定的想法,但我当然愿意看看你想要的。
-
知道最容易发布和链接的地方是什么吗?
-
我通常使用 GitHub 或 drobbox(带有公共链接)。
标签: ios objective-c ios7 uipopover