我试图更改导航栏的窄阴影栏,并使用以下代码:
if let hairline = findNavigationBarHairline(navigationBar)
{
hairline.bounds.size.height = 5.0
hairline.backgroundColor = UIColor.blueColor()
}
还有这个:
func findNavigationBarHairline(view:UIView) -> UIImageView?
{
if let hairline = view as? UIImageView where hairline.bounds.size.height <= 1.0
{
return hairline
}
for subview in view.subviews
{
if let imageView = findNavigationBarHairline(subview)
{
return imageView
}
}
return nil
}
这成功找到了UIImageView这是阴影线,但是如果我尝试在此处进行任何更改,都将无效。设置大小/颜色后,这是代码中“图像视图”的位置:
(lldb) po hairline
<UIImageView: 0x126d21030; frame = (0 61.75; 320 5); userInteractionEnabled = NO; layer = <CALayer: 0x126d0b470>>
在这里可以看到高度为5,但仍以其原始大小和颜色显示。如果我使用XCode的视图层次结构显示并从那里转储图像视图,则结果如下:
> Printing description of $124: <UIImageView: 0x126d21030; frame = (0
> 64; 320 0.5); userInteractionEnabled = NO; layer = <CALayer:
> 0x126d0b470>
可以看出,它是同一对象,但是其高度是0.5,而不是5。为什么更改大小和颜色没有效果?(我也更改了UIImage,但这也没有任何效果)。
首先-您应该通过将图片设置为的shadowImage
属性来执行此操作UINavigationBar
。那就是那个财产的目的。请注意,您必须为此设置自定义背景图片setBackgroundImage(_:forBarMetrics:)
。使用下面的代码,我能够创建没有阴影的白色半透明导航栏。请注意,白色图像只是一个白色像素,您可以轻松地在代码中轻松创建它。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
navigationController!.navigationBar.setBackgroundImage(UIImage(named: "white"), forBarMetrics: .Default)
navigationController!.navigationBar.shadowImage = UIImage()
}
结果是:
第二-深入了解SDK提供的组件的视图层次结构通常不是最好的主意。您不能保证视图层次结构在将来的版本中不会更改(或者您可以在较早的iOS版本上使用此功能)。
话虽这么说,您正在做的事情最不可能起作用,因为backgroundColor
在图像视图上设置a不会改变该图像视图正在渲染的图像。其次,Apple很可能使用Auto Layout来组织的子视图UINavigationBar
,因此frame
/bounds
本质上将是派生数据,并且如果您更改了它,Auto Layout只会重置它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句