无法使用UISegmentControl获取UINavigationBar高度(自定义背景)

时间:2011-05-12 13:14:14

标签: iphone background height uinavigationbar uisegmentedcontrol

我需要检测UINavigationBar的高度

- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    NSLog(@"NAV HEIGHT IS %d %d",self.frame.size.height, self.frame.size.width);
}

为高度打印0

虽然我在为什么它的宽度为1078329344和1077936128? Apple使用了哪些单位?是否基于326dpi进行了一些奇怪的计算?

...背景

我正在使用drawrect重载技术通过App向UINavigationBars添加自定义图形。

一切都很好但只有一个问题:当处于横向模式且UINavigationBar中有UISegmentControl时,高度会从较短的横向增加到与纵向模式相同的高度。

代码可以检测宽度,为什么不能检测高度? 下面的NSLOg返回0

如果我能说出UINavigationBar的高度,我可以相应地交换图形

- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    if ([self isMemberOfClass:[UINavigationBar class]] == NO) {
        return;
    }

    UIImage *image = (self.frame.size.width > 320) ?
                        [UINavigationBar bgImageLandscape] : [UINavigationBar bgImagePortrait];

    NSLog(@"NAV HEIGHT IS %d %d",self.frame.size.height, self.frame.size.width);

    CGContextClip(ctx);
    CGContextTranslateCTM(ctx, 0, image.size.height);
    CGContextScaleCTM(ctx, 1.0, -1.0);
    CGContextDrawImage(ctx, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
}

Ahmet Ardal的上述代码(谢谢)

1 个答案:

答案 0 :(得分:0)

您正在进行错误的数据格式化。 %d用于整数,但Apple使用浮点数作为接口坐标和大小。因此,您需要使用%f来格式化字符串。尝试更改为:

NSLog(@"NAV HEIGHT IS %f %f",self.frame.size.height, self.frame.size.width);