代码之家  ›  专栏  ›  技术社区  ›  Lawrence

如何在uinavigationbar的底部绘制一条线?

  •  0
  • Lawrence  · 技术社区  · 15 年前

    我设计了一款iPhone应用程序,我正在研究导航栏底部的1px红线。我知道如何用石英和抽屉画一条线,但我如何才能进入Uinavigationbar的视图?或者,在应用程序的主视图中,在所有其他视图之上画一条线是可行的吗?

    邓肯·威尔科克斯下面的答案可以画出这条线,但之后酒吧里的按钮就不可能按下了。

    如果我执行[self.navigationitem.titleview.superview sendSubviewToBack:titleView]操作,那么在NIB文件中创建的按钮可以工作,而不是动态添加的按钮。

    2 回复  |  直到 15 年前
        1
  •  1
  •   duncanwilcox    15 年前

    我想答案取决于你想要红线的位置,作为导航栏的一部分,或者就在它下面。这将只有1个像素的差异,但设计师们现在要求:)

    如果你想把它放在导航栏下面,你一定要把它放在应用程序的所有视图中,这条线是需要的。

    有一种非常简单的方法可以改变导航栏的外观,我用它来剥皮整个导航栏的外观,但是如果你使图像部分透明,它可能只对导航栏的某些部分起作用。

    基本上我们要剥皮 UINavigationItem A的 UIViewController 在你的导航层次结构中。

    • 创建包含自定义导航栏外观的320x44图像
    • 添加一个 UIImageView XIB 何处 导航项
    • 链接 titleView 性质 导航项 UIIVIEVIEW

    除了标题视图将以wierd方式调整大小外,这几乎可以工作。为了解决这个问题,我有一个 UIIVIEVIEW 保持图像正确设置的子类:

    @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
    

    所以不用 UIIVIEVIEW 上面你用这个 TitleViewHack 班级。

        2
  •  0
  •   Lawrence    15 年前

    这就是我所决定的:

    // 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)];
    }