2015-04-04 4 views
10

ho messo un'immagine personalizzata nella backIndicatorImage utilizzando questo codice:centro verticalmente backIndicatorImage a Swift

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

L'immagine è leggermente più alto rispetto alla grafica standard in modo che voglio essere in grado di centrare verticalmente esso.

ho cercato di trovare l'immagine nella barra di navigazione (non molto elegante) utilizzando questo codice (qualche suggerimento migliore accoglienza):

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 
    } 
} 

La cosa frustrante è che l'immagine appare momentaneamente nel posto giusto e poi viene rimesso nella posizione originale.

Ho provato a chiamare questo:

  • viewDidLoad
  • viewWillLayoutSubviews
  • viewDidLayoutSubviews
  • viewDidAppear

senza la gioia.

Qualcuno ha qualche suggerimento per favore?

+0

Di solito identificare UIViews dalla loro etichetta. – Arbitur

risposta

5

È possibile modificare la posizione UIImmagine direttamente dal codice successivo. Origin è possibile impostare manualmente:

... 
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

Questo lo ha spostato, ma ho bisogno di spostare la mia immagine verso l'alto. Se chiamo CGPointMake (0, -2), quindi ritaglia l'immagine. Eventuali suggerimenti? Grazie a – iphaaw

+0

c'è un'area di disegno limitata per l'indicatore posteriore. Al leasing, è possibile ridimensionare l'immagine e organizzarla in limiti standard. – dimpiax