#iphone #background #height #uinavigationbar #uisegmentedcontrol
#iPhone #фон #высота #панель 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?, это какой-то странный расчет на основе 326 точек на дюйм?
Фон…
Я использую метод перегрузки drawrect, чтобы добавить пользовательскую графику в панели UINavigationBar через приложение.
Все хорошо, но есть одна проблема: когда в альбомном режиме 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:
Вы неправильно выполняете форматирование данных. %d
используется для целых чисел, но Apple использует значения с плавающей точкой для координат и размеров интерфейса. Поэтому вам нужно использовать %f
для форматирования вашей строки. Попробуйте изменить на:
NSLog(@"NAV HEIGHT IS %f %f",self.frame.size.height, self.frame.size.width);
Комментарии:
1. лол. Нет ничего лучше, чем совершить ошибку stoopid. Я искал формат frame.size.height, но ничего не смог найти. Вероятно, поиск был недостаточно тщательным. @PeyloW Спасибо.
2. У вас также есть удобные методы для преобразования большинства типов CoreGraphics в строки, поэтому вы могли бы сделать:
NSLog(@"Nav size: %@", NSStringFromCGSize(self.frame.size));
.