Как бы я нарисовал линию внизу UINavigationBar? - PullRequest
0 голосов
/ 15 апреля 2009

Дизайн, который мне дали для приложения для iPhone. Я работаю над вызовами красной линии размером 1 пиксель внизу навигационной панели. Я знаю, как нарисовать линию с помощью Quartz и -drawRect, но как мне получить доступ к представлению UINavigationBar? Или это поможет нарисовать линию на главном экране приложения поверх всего остального?

Ответ Дункана Уилкокса, приведенный ниже, работает, чтобы нарисовать линию, но тогда кнопки на панели становятся невозможными.

Если я сделаю [self.navigationItem.titleView.superview sendSubviewToBack: titleView], то будут работать кнопки, созданные в файлах пера, но не те, которые добавляются динамически.

Ответы [ 2 ]

1 голос
/ 16 апреля 2009

Я думаю, что ответ зависит от того, где вы хотите красную линию, как часть панели навигации или просто под ней. Это было бы разницей всего в 1 пиксель, но дизайнеры требуют этого:)

Если вы хотите, чтобы он находился ниже панели навигации, вам определенно нужно разместить его во всех представлениях приложения, где требуется строка.

Есть удивительно простой способ изменить внешний вид навигационной панели, я использовал его для скининга всего вида навигационной панели, но он, вероятно, будет работать даже для некоторых частей навигационной панели, если вы сделаете изображение частично прозрачным.

По сути, мы хотим обработать UINavigationItem из UIViewController, который находится в вашей иерархии навигации.

  • создать изображение размером 320x44, содержащее ваш собственный внешний вид navbar
  • добавить UIImageView к XIB, где UINavigationItem равно
  • связывает свойство titleView UINavigationItem с UIImageView

Это почти работает, за исключением того, что вид заголовка будет изменен более странным способом. Чтобы исправить это, у меня есть подкласс UIImageView, который держит изображение правильно установленным:

@implementation TitleViewHack
- (void)setFrame:(CGRect)frame
{
    frame.size.width = 320;
    if(frame.origin.x > 0 && frame.origin.x < 20)
        frame.origin.x = 0;
    [super setFrame:frame];
}
@end

Таким образом, вместо UIImageView выше вы будете использовать TitleViewHack класс.

0 голосов
/ 26 мая 2009

На этом я остановился:

// UINavigationBar subclass
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed: @"background_navbar.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...