Вертикальный центр backIndicatorImage в Swift

Я поместил пользовательское изображение в 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

без радости.

Есть ли у кого-нибудь предложения?

Ответ 1

Вы можете изменить свою позицию 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
}