我有一个问题,当视图控制器以模态方式呈现时,导航栏中的 UILabel 没有正确着色。
UILabel在导航栏中,作为一个UIButton的子视图,它是UIBarButtonItem的子视图,也就是导航控制器的rightBarButtonItem;查看层次结构:
rightBarButtonItem -UIBarButtonItem --UIButton <-- 这是 UIButtonTypeSystem,带有购物车图像。正确着色。 ---UILabel <-- 这是购物车中商品的数量。不调色。
需要明确的是,除了呈现模态期间的标签色调外,一切正常。在呈现视图控制器之前,购物车被染成蓝色,包含 # 购物车项目的标签也是如此。当模态出现时,购物车图像变暗,但标签保持蓝色。
我会发布图片,但我没有足够的声誉,对不起。
我试过的:
- 在标签上设置色调颜色
- 设置
label.userInteractionEnabled = NO
- 将 设置
label.tintAdjustmentMode = UIViewTintAdjustmentModeDimmed
为所有可用值(都没有帮助) - 子类化 UIButton 并在期间绘制 # 个购物车项目
drawRect
- 在视图控制器演示期间,在
navigationItem.rightBarButtonItem.customView
层次结构中查找标签并手动设置 tintAdjustmentMode。
没有任何效果。我没主意了...
这是我创建 UIBarButtonItem 的代码:
+(UIBarButtonItem*) getCartBarButtonItemWithDelegate:(id)delegate {
NSInteger cartItems = [[DataHandler sharedInstance]cartQuantity];
NSString* num = [NSString stringWithFormat:@"%lu", (unsigned long) cartItems];
NSString* cartImageToUse = @"cart_toolbar_button_icon";
CGFloat fontSize = 11;
UILabel *label = nil;
if(cartItems > 0) {
if([num length] > 1) {
cartImageToUse = @"cartnumbered_toolbar_button2_icon";
fontSize = 10;
label = [[UILabel alloc]initWithFrame:CGRectMake(7, -3, 16, 12)];
} else {
cartImageToUse = @"cartnumbered_toolbar_button_icon";
label = [[UILabel alloc]initWithFrame:CGRectMake(7.5, -3, 16, 12)];
}
[label setFont:[UIFont systemFontOfSize:fontSize]];
[label setText: num ];
[label setTextAlignment:NSTextAlignmentCenter];
[label setBackgroundColor:[UIColor clearColor]];
}
// attempt at sub classing UIButton and drawing the number of items in the drawRect method
//CartButton *button = [CartButton buttonWithType:UIButtonTypeSystem];
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
[button setImage:[UIImage imageNamed: cartImageToUse] forState:UIControlStateNormal];
[button addTarget:delegate action:@selector(handleCartTouch:)forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(0, 0, 25, 21)];
if(label != nil) {
[label setTextColor: button.tintColor];
[button addSubview:label];
}
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithCustomView:button];
[label release];
return newBackButton;
}
有任何想法吗?