我正在开发一个 iPad 应用程序,并且正在使用 UIPopoverControllers。我处于应用程序需要品牌和样式的部分,我想知道如何更改 UIPopoverController 的颜色/色调?标准是深蓝色,但它需要是另一种颜色。
这可能吗?
问候,托马斯
我正在开发一个 iPad 应用程序,并且正在使用 UIPopoverControllers。我处于应用程序需要品牌和样式的部分,我想知道如何更改 UIPopoverController 的颜色/色调?标准是深蓝色,但它需要是另一种颜色。
这可能吗?
问候,托马斯
从iOS 5.0开始,这可以通过继承抽象类并将子类分配给实例上的属性来实现。不幸的是,没有属性,因为弹出框需要为其箭头和边框使用图像,以便在动态调整大小期间实现平滑的动画。您可以在UIPopoverBackgroundView 类参考中了解有关如何自定义 UIPopoverController 外观的更多信息UIPopoverBackgroundView
popoverBackgroundViewClass
UIPopoverController
tintColor
It's impossible for now.
It's what I call the "Box in a Box" model. You get control of the box inside of the box (the UIViewController
inside of the UIPopoverController
), but you have very limited control over the actual popover itself. Outside of the arrow direction and the size, you can't change much else. There are also options for a modal effect popover, which dims everything else when it shows up, but I haven't tried to get it working.
I'm sure you've noticed there is no UIPopover
class by now.
The answer you want to hear:
If you really want to style one that bad, just write your own. It's really not that hard.
The link you want to click:
Cocoacontrols is an index of iOS and OSX components available on GitHub, they have some popover stuff.
iOS 7 引入backgroundColor
了UIPopoverController
影响/包括导航背景颜色以及弹出框箭头的属性。
@property (nonatomic, copy) UIColor *backgroundColor NS_AVAILABLE_IOS(7_0);
使用示例:
if ([self.popoverVC respondsToSelector:@selector(setBackgroundColor:)]) { // Check to avoid app crash prior to iOS 7
self.popoverVC.backgroundColor = [UIColor greenColor]; // [UIColor colorWithPatternImage:@"..."] doesn't reflect the color on simulator but on device it works!
}
注意- 截至目前(iOS 7.0.3),在某些情况下(如使用 colorWithPatternImage 设置颜色:),模拟器(甚至某些设备)不支持颜色。
把我的帽子扔在这里;
我UIPopoverBackgroundView
在 iOS 5+ 中利用 s 在 s 上添加了一个简单的tintColor
属性UIPopoverController
。
PCPopoverController
:https ://github.com/pcperini/PCPopoverController
我尝试通过自定义弹出框内的视图控制器然后使用以下代码隐藏弹出框边框来欺骗它:
UIView * border = [[insideViewController.view.superview.superview.superview subviews] objectAtIndex:0];
border.hidden = YES;
该应用程序实际上仍在开发中,所以我希望其他人会对此解决方案发表评论。
查看这些利用 UIPopoverBackgroundView 的最新项目 https://github.com/CRedit360/C360PopoverBackgroundView https://github.com/GiK/GIKPopoverBackgroundView
您可以为此使用Elegant Popover cocoapod。您可以自定义箭头和弹出框本身的形状和颜色。此外,您可以为弹出框添加彩色边框。
我知道这是一个糟糕的构造答案,但我只是在玩 UIPopoverController 的视图。它们确实存在。
访问它们的唯一方法是从您位于 UIPopovercontroller 中的视图。
我有一个导航控制器,所以我遵循这个层次结构
UIView *test = ((UIView *)[[[self.navigationController.view.superview.superview.subviews objectAtIndex:0] subviews] objectAtIndex:1]);
UIView *test2 = ((UIView *)[[[self.navigationController.view.superview.superview.subviews objectAtIndex:0] subviews] objectAtIndex:1]);
test.backgroundColor = [UIColor greenColor];
test2.backgroundColor = [UIColor greenColor];
这并不完全是最终目标,但它确实很接近。
你会发现the_view_in_the_popover.superview.superview
(如果你没有从导航控制器视图伸出手,可能只有一个超级视图)是一个 UIPopoverView。如果您将其转换为 UIView 并将其视为 UIView 您并没有真正违反任何规则。我想这真的取决于苹果。
移除 UIPopoverController 边框:
NSArray* subviews = ((UIView*)[popupController.contentViewController.view.superview.superview.superview.subviews objectAtIndex:0]).subviews;
for(UIView *subview in subviews){
[subview removeFromSuperview];
}