2016-06-08 75 views
1

我試圖改變導航欄的窄陰影酒吧和我使用下面的代碼:編輯導航欄的上影線的UIImageView沒有影響

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是陰影線,但如果我嘗試在這裏更改任何內容,則不起作用。下面是在代碼中的那點圖片瀏覽的PO剛過其大小/顏色已設置:

(lldb) po hairline 
<UIImageView: 0x126d21030; frame = (0 61.75; 320 5); userInteractionEnabled = NO; layer = <CALayer: 0x126d0b470>> 

這可以看出,高度爲5,但它仍然與原來的大小和顯示顏色。如果我使用Xcode的觀點hieararchy顯示,並從那裏傾倒攝像畫面是這樣的結果:

> Printing description of $124: <UIImageView: 0x126d21030; frame = (0 
> 64; 320 0.5); userInteractionEnabled = NO; layer = <CALayer: 
> 0x126d0b470> 

可以看出它是同一個對象,但其高度爲0.5,而不是5 爲什麼變化對尺寸和顏色沒有影響? (我也改變了UIImage,但這也沒有任何影響)。

回答

0

首先 - 您應該通過將圖像設置爲屬性UINavigationBar來完成此操作。這就是財產的目的。請注意,您必須通過setBackgroundImage(_:forBarMetrics:)設置自定義背景圖像才能使其工作。使用下面的代碼,我能夠創建一個沒有陰影的白色半透明導航欄。請注意,白色圖像只是一個白色像素,您可以在代碼中輕鬆創建。

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    navigationController!.navigationBar.setBackgroundImage(UIImage(named: "white"), forBarMetrics: .Default) 
    navigationController!.navigationBar.shadowImage = UIImage() 
} 

結果是:

enter image description here

二 - 洞穴探險到由SDK提供的組件的視圖層次一般不是最好的主意。您不能保證視圖層次結構在將來的版本中不會發生變化(或者您在舊版本iOS上的工作原理)。

話雖如此,你在做什麼不是最有可能的工作,因爲在圖像視圖上設置backgroundColor不會改變該圖像視圖呈現的圖像。其次,Apple很可能會使用自動佈局來組織子視圖UINavigationBar,所以frame/bounds本質上是要派生的數據,如果您更改它,自動佈局將重置它。

+0

我知道這種方法,並嘗試過,但它有複雜的敲擊效果 - 我使用搜索欄出現/消失和其他東西繼續和整體不工作,因爲在使用時設置半透明的額外要求的ShadowImage。 – Gruntcakes

+0

@ChromiumDioxide我正在開發一個應用程序,因爲我們講的是使用帶有自定義'shadowImage'的非半透明導航欄。你確定這是一個要求嗎? –

+0

正如我所說,更改UImage也不起作用,爲什麼?調整大小隻是爲了在調試時更容易看到結果。 – Gruntcakes