在自定义 UINavigationBar 中绘图,附加到顶部

Posted

技术标签:

【中文标题】在自定义 UINavigationBar 中绘图,附加到顶部【英文标题】:Drawing in custom UINavigationBar, attached to top 【发布时间】:2013-10-22 16:30:16 【问题描述】:

我有一个UINavigationBar 的子类。这是barPositionUIBarPositionTopAttached。 比我在我的子类中覆盖-(void)drawRect:(CGRect)rectrect,作为参数,总是有 44 px 的高度,我只能在这个矩形内绘制。所以,我无法在状态栏上进行绘图,它具有默认外观。如果我将-drawRect 注释掉,那么它看起来像预期的那样,导航栏和状态栏看起来是一个整体,并且有 64 像素的高度。有没有办法通过在UINavigationBar 的子类中覆盖-drawRect: 来实现这种效果?

【问题讨论】:

【参考方案1】:

当我在 drawRect 中添加图像时,我遇到了一个带有背景图像的自定义 UINavigationBAr 问题,它不会出现在 ios 7 的半透明状态栏下。

将背景图片移动到 ViewControllers 的 viewDidLoad 方法后,背景图片随即出现在状态栏下方

-(void)viewDidLoad

 if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad)

    UIImage *image = [UIImage imageNamed:@"nav-bg-ipad.png"];
    [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
else
    UIImage *image = [UIImage imageNamed:@"nav-bg-iphone.png"];
    [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

// do your other stuff now …

希望这会有所帮助

【讨论】:

是的,看起来使用覆盖的 -drawRect 是不可能的。我发现的另一种可能性是覆盖 -layoutSubview 方法。

以上是关于在自定义 UINavigationBar 中绘图,附加到顶部的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义 UINavigationBar

如何从 cellForRowAt 调用 draw(_ rect: CGRect) 在自定义 tableview 上绘图?

如何在自定义 TitleView 的子视图上添加子视图

android:如何用canvas在自定义view里画图

在自定义 UIView 中动画 UIBezierPath 不起作用

如何在自定义事件中停止事件传播/冒泡