在Swift中垂直居中backIndicatorImage

iph*_*aaw 11 uinavigationbar swift

我已经backIndicatorImage使用此代码将自定义图像放入:

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

图像比标准图形略高,所以我希望能够垂直居中.

我尝试使用此代码在导航栏中找到图像(不是很优雅)(欢迎任何更好的建议):

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
    }
}
Run Code Online (Sandbox Code Playgroud)

令人沮丧的是,图像暂时出现在正确的位置,然后被放回原来的位置.

我试过这个叫:

  • viewDidLoad中
  • viewWillLayoutSubviews
  • viewDidLayoutSubviews
  • viewDidAppear

没有快乐.

有人有什么建议吗?

dim*_*iax 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
}
Run Code Online (Sandbox Code Playgroud)