Не удается получить высоту UINavigationBar (пользовательский фон) с помощью UISegmentControl - PullRequest
0 голосов
/ 12 мая 2011

Мне нужно определить высоту 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? Это какой-то странный расчет, основанный на 326 точек на дюйм?

Фон ...

Я использую технику перегрузки drawrect, чтобы добавить пользовательскую графику в 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);
}

Над кодом Ахмета Ардала (спасибо)

1 Ответ

0 голосов
/ 12 мая 2011

Вы неправильно форматируете данные. %d для целых чисел, но Apple использует числа с плавающей точкой для координат и размеров интерфейса. Поэтому вам нужно использовать %f для форматирования вашей строки. Попробуйте изменить на:

NSLog(@"NAV HEIGHT IS %f %f",self.frame.size.height, self.frame.size.width);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...