2015-04-04 49 views
10

我已經使用這個代碼放在一個自定義的圖像到backIndicatorImage垂直中心backIndicatorImage斯威夫特

var backButton = UIImage(named: "locationbar_back")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) 
self.navigationController!.navigationBar.backIndicatorImage = backButton 
self.navigationController!.navigationBar.backIndicatorTransitionMaskImage = backButton 

的圖像比標準的圖形稍高些,所以我希望能夠垂直居中。

我曾嘗試使用此代碼(更好的建議歡迎)在導航欄中找到圖像(不是很優雅):

for myview in self.navigationController!.navigationBar.subviews as [UIView] 
{ 
    if myview.frame.width == 17 //need a better way of identifying object 
    { 
     var newFrame = myview.frame 
     newFrame.origin.y = 6.0 
     myview.frame = newFrame 
    } 
} 

令人沮喪的是,圖像中的正確的地方瞬間出現,然後被恢復到原來的位置。

我試圖在調用此:

  • viewDidLoad中
  • viewWillLayoutSubviews
  • viewDidLayoutSubviews
  • viewDidAppear

沒有快樂。

請問有人有什麼建議嗎?

+0

您通常通過標記標識UIViews。 – Arbitur 2015-04-17 20:23:44

回答

5

您可以通過下一個代碼直接更改您的UIImage 位置。 您可以手動設置的原點:

... 
var backButtonImage = UIImage(named: "backButtonImage")! 
backButtonImage = changeImagePosition(backButtonImage, origin: CGPointMake(0, 0)) 

navigationController!.navigationBar.backIndicatorImage = backButtonImage 
navigationController!.navigationBar.backIndicatorTransitionMaskImage = backButtonImage 
... 
func changeImagePosition(image: UIImage, origin: CGPoint) -> UIImage { 
    let size = image.size 

    UIGraphicsBeginImageContextWithOptions(size, false, 2) 
    image.drawInRect(CGRectMake(origin.x, origin.y, size.width, size.height)) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return newImage 
} 
+0

這確實移動了它,但我需要向上移動我的圖像。如果我打電話給CGPointMake(0,-2),那麼它會裁剪圖像。有什麼建議麼?謝謝 – iphaaw 2015-04-18 09:22:58

+0

背部指示器的繪製區域有限。 至少,您可以縮放圖像並按標準範圍排列。 – dimpiax 2015-04-18 09:50:54