在自定义 UINavigationBar 中绘图,附加到顶部
Posted
技术标签:
【中文标题】在自定义 UINavigationBar 中绘图,附加到顶部【英文标题】:Drawing in custom UINavigationBar, attached to top 【发布时间】:2013-10-22 16:30:16 【问题描述】:我有一个UINavigationBar
的子类。这是barPosition
是UIBarPositionTopAttached
。
比我在我的子类中覆盖-(void)drawRect:(CGRect)rect
。 rect
,作为参数,总是有 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 中绘图,附加到顶部的主要内容,如果未能解决你的问题,请参考以下文章
如何从 cellForRowAt 调用 draw(_ rect: CGRect) 在自定义 tableview 上绘图?