切换到Swift 4后,BarButtonItem格式不正确

时间:2017-10-01 00:50:49

标签: ios swift uikit uibarbuttonitem swift4

升级到Swift 4之后,我用来添加自定义UIBarButtonItem的代码不再有效,而是以一种特殊的方式挤压图像:

enter image description here

  // In viewDidLayoutSubviews
  if let backButton = Utils.createBackButton(color: .white, target: self, selector: #selector(LoginViewController.backPressed)) {
        navigationItem.leftBarButtonItem = backButton
        print("navigation button width", backButton)
    }

// In Utils.swift
class func createBackButton(color: BackArrowColors, target: UIViewController, selector: Selector) -> UIBarButtonItem? {
    var backImage = UIImage()
    if color == .white {
        backImage = UIImage(named: "back-arrow-white.png")!
    } else if color == .black {
        backImage = UIImage(named: "back-arrow-black.png")!
    } else {
        return nil
    }

    let backButton: UIButton = UIButton(type: UIButtonType.custom)
    backButton.frame = CGRect(x: 0, y: 0, width: 35, height: 35)
    backButton.contentMode = UIViewContentMode.scaleAspectFit
    backButton.setImage(backImage, for: .normal)
    backButton.addTarget(target, action: selector, for: .touchUpInside)
    backButton.imageEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 10)
    let leftBarButtonItem: UIBarButtonItem = UIBarButtonItem(customView: backButton)
    return leftBarButtonItem
}

框架似乎是正确的,在控制台中我得到以下控制台消息:

navigation button width <UIBarButtonItem: 0x7fb3d7c0d010> view=<UIButton: 0x7fb3d7c20ae0; frame = (0 0; 35 35); opaque = NO; layer = <CALayer: 0x60c000238b40>>

有什么想法吗?谢谢你们!

1 个答案:

答案 0 :(得分:1)

这是当前iOS 11版本的已知错误。 UIBarButton项目现在使用约束而不是早期的帧方法。

关注thisthis寻求解决方案或更多解释。

this link有助于新的实施。