Saya memiliki navigationBar di mana saya ingin memiliki button di sebelah kiri, activityIndicator sebagai title dan doneButton di sebelah kanan. Inilah yang saya coba:

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

Masalahnya adalah googleButton dan activityIndicator tidak berada di kiri/tengah:

enter image description here

Apa yang kulewatkan di sini?

Pembaruan:

Saya mencoba menyetel leftBarButtonItem ke item sederhana dengan title dan berfungsi seperti yang diharapkan.. Mengapa tidak berfungsi dengan gambar?

0
Chris 19 November 2020, 22:19

1 menjawab

Jawaban Terbaik

Saya pikir itu ada hubungannya dengan intrinsicContentSize dari googleButton. Karena Anda belum secara eksplisit mengaturnya, ukuran gambar logo google memperluas lebar tombol. Properti intrinsicContentSize dari UIButton memiliki tinggi yang disetel secara default, tetapi tidak untuk lebarnya:

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)

Anda dapat membuat ekstensi UIImage untuk menggambar ulang ukuran logo 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)
    }
}

Ubah nama tombol menjadi:

self.navigationItem.leftBarButtonItem = googleBarButton

Tentu saja, 25 poin untuk lebar dan tinggi adalah arbitrer. Sesuaikan agar sesuai dengan kebutuhan Anda.

0
Kevvv 20 November 2020, 16:48