我在我的应用程序中使用新的(在 iOS 7 中) UIPopoverController.backgroundColor 设置来根据需要更改弹出框的颜色,但我发现使用此设置会导致每当我打开我的popovers - 在大约半秒内,它会从默认的半透明白色开始,然后逐渐变为我选择的颜色。这是不希望的;它应该只是我打开它时设置的颜色。
该文档指出:
使用此属性自定义弹出框的背景颜色。在弹出框可见时更改此属性的值会触发到新颜色的动画转换。该属性的默认值为 nil,对应于默认的背景颜色。
但是,即使我在我的应用程序打开时设置它并且不再设置它,它仍然会在我每次打开任何弹出窗口时闪烁。
我对使用 UIPopoverBackgroundView 持开放态度,但我不确定它是否允许我即时更改背景颜色,因为它似乎是一个静态解决方案,仅用于更改应用程序中所有弹出框的样式。在此先感谢您的任何建议。
编辑(代码):
当我的主视图控制器加载并准备 UI 的其余部分时(这是许多弹出框初始化之一):
fileOptionsController = [[FileOptionsViewController alloc] initWithNibName:@"FileOptionsViewController" bundle:nil];
fileOptionsController.delegate = self;
self.fileOptionsPopoverController = [[UIPopoverController alloc] initWithContentViewController:fileOptionsController];
[popoverControllers addObject:self.fileOptionsPopoverController];
初始化弹出框后,我正在运行它(仍在主初始化代码中),目的是在设置 backgroundColor 和交互之间有很长的延迟进行测试(注意:更改 alpha 没有效果,设置为 1 时仍然会发生):
for (UIPopoverController *po in popoverControllers) {
[po setBackgroundColor:[UIColor colorWithWhite:0.3f alpha:0.90f]];
}
然后,当用户点击按钮以显示弹出框时调用它:
- (void)showPopover:(UIPopoverController *)popover from:(UIButton *)btn {
[popover presentPopoverFromRect:CGRectMake(btn.frame.origin.x + 5.0f, btn.frame.origin.y - 1.0f, btn.frame.size.width, btn.frame.size.height) inView:btn.superview permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
很直接。这些是唯一可以访问此弹出框或任何弹出框的相关位置,除非它已经显示在何处将其关闭。