我可以自定义QlPreviewController控制器中导航栏的颜色吗?
我试过跟随
[[UINavigationBar appearanceWhenContainedIn: [QLPreviewController class],nil] setBarTintColor: [UIColor redColor]];
但它不起作用.
谢谢.
解决方法
是的,如果你通过presentViewController显示它,那么在iOS 11的QLPreviewController上有一个barTintColor的错误:animated:
这是我的解决方案,使用setBackgroundImage:使用1×1图像而不是setBarTintColor:
[[UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[QLPreviewController class]]]
setBackgroundImage:[UIImage imageWithColor:[UIColor redColor]]
forBarMetrics:UIBarMetricsDefault];
和imageWithColor:是我的自定义类UIImage中的一个方法,它返回所需颜色的可调整大小的1×1图像(上例中的红色):
+ (UIImage *)imageWithColor:(UIColor *)color {
CGRect rect = CGRectMake(0.0f,0.0f,1.0f,1.0f);
const CGFloat alpha = CGColorGetAlpha(color.CGColor);
const BOOL opaque = alpha == 1;
UIGraphicsBeginImageContextWithOptions(rect.size,opaque,0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context,[color CGColor]);
CGContextFillRect(context,rect);
UIImage *image = UIGraphicsGetimageFromCurrentimageContext();
UIGraphicsEndImageContext();
return image;
}
我还建议用iOS版本检查包装:
if (SYstem_VERSION_GREATER_THAN_OR_EQUAL_TO(@"11.0")) {
[[UINavigationBar appearance...
setBackgroundImage:[UIImage imageWithColor:...]
forBarMetrics:UIBarMetricsDefault];
}
SYstem_VERSION_GREATER_THAN_OR_EQUAL_TO来自的地方:
#define SYstem_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) #define SYstem_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) #define SYstem_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) #define SYstem_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) #define SYstem_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)