我需要检测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的上述代码(谢谢)
答案 0 :(得分:0)
您正在进行错误的数据格式化。 %d
用于整数,但Apple使用浮点数作为接口坐标和大小。因此,您需要使用%f
来格式化字符串。尝试更改为:
NSLog(@"NAV HEIGHT IS %f %f",self.frame.size.height, self.frame.size.width);