【问题标题】:Navigation Bar Items not left aligned导航栏项目未左对齐
【发布时间】:2021-03-03 05:24:54
【问题描述】:

我有一个navigationBar,我想在左边有一个button,一个activityIndicator 作为title,在右边有一个doneButton。这是我尝试过的:

    let activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
    let googleImage  = UIImage(named: "google")!
    let googleButton = UIBarButtonItem(image: googleImage,  style: .plain, target: self, action: #selector(googleButtonTapped))
    googleButton.image = UIImage(named: "google")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
    
    navigationController?.navigationBar.barTintColor = UIColor.blueCustom
    navigationController?.navigationBar.tintColor = UIColor.white
    activityIndicator.hidesWhenStopped = true
    activityIndicator.color = .white
    
    self.navigationItem.titleView = self.activityIndicator
    self.navigationItem.leftBarButtonItem = googleButton
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Fertig", style: .done, target: self, action: #selector(doneTapped))

问题是googleButtonactivityIndicator不在左边/中间:

我在这里错过了什么?

更新:

我尝试使用titleleftBarButtonItem 设置为一个简单的项目,它可以作为expexted..为什么它不能与图像一起使用?

【问题讨论】:

  • 你用图片初始化了googleButton bar item,为什么你稍后重新分配googleButton.image呢?尝试使用Debug View Hierarchy
  • 我解决了这个问题,但这并没有导致问题。它打破了导航栏的几个约束,但我不知道为什么
  • 可以分享图片链接下载吗?

标签: ios swift uiview uinavigationbar


【解决方案1】:

我认为这与googleButtonintrinsicContentSize 有关。由于您没有明确设置它,谷歌徽标图像的大小正在扩大按钮的宽度。 UIButtonintrinsicContentSize 属性默认设置了高度,但没有设置宽度:

let googleImage  = UIImage(named: "google")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal).resizeTo(size: CGSize(width: 25, height: 25))
let googleButton = UIButton()
googleButton.setBackgroundImage(googleImage, for: .normal)
googleButton.addTarget(self, action: #selector(googleButtonTapped), for: .touchUpInside)
let googleBarButton = UIBarButtonItem(customView: googleButton)

您可以创建一个 UIImage 扩展来重绘 google 徽标的大小:

extension UIImage {
    func resizeTo(size: CGSize) -> UIImage {
        let renderer = UIGraphicsImageRenderer(size: size)
        let image = renderer.image { _ in
            self.draw(in: CGRect.init(origin: CGPoint.zero, size: size))
        }
        
        return image.withRenderingMode(self.renderingMode)
    }
}

将按钮名称更改为:

self.navigationItem.leftBarButtonItem = googleBarButton

当然,宽度和高度的 25 点是任意的。调整它以满足您的需要。

【讨论】:

    猜你喜欢
    • 2013-11-13
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多