Kode ini berfungsi dengan baik di ios10. saya mendapatkan label saya dan tombol gambar yang merupakan profil foto pengguna, lingkaran melingkar .. ok. tetapi ketika menjalankan simulator xcode 9 ios11 saya mendapatkannya keluar. bingkai tombol harus 32x32, ketika memeriksa sim dan mendapatkan tampilan dan memberitahu xcode untuk menggambarkan tampilan saya mendapatkan keluaran sebagai 170x32 atau sesuatu seperti itu.
inilah kode saya.
let labelbutton = UIButton( type: .system)
labelbutton.addTarget(self, action:#selector(self.toLogin(_:)), for: .touchUpInside)
labelbutton.setTitleColor(UIColor.white, for: .normal)
labelbutton.contentHorizontalAlignment = .right
labelbutton.titleLabel?.font = UIFont.systemFont(ofSize: 18.00)
let button = UIButton(type: .custom)
button.addTarget(self, action:#selector(self.toLogin(_:)), for: .touchUpInside)
button.frame = CGRect(x: 0, y: 0, width: 32, height: 32)
button.setTitleColor(UIColor.white, for: .normal)
button.setTitleColor(UIColor.white, for: .highlighted)
var buttomItem : UIBarButtonItem = UIBarButtonItem()
buttomItem.customView = button
buttomItem.target = self
buttomItem.action = "ToLogin"
var labelItem : UIBarButtonItem = UIBarButtonItem()
labelItem.customView = labelbutton
labelItem.target = self
labelItem.action = "ToLogin"
if let user = PFUser.current() {
print("LOGIN : checkiando si existe usuario ")
labelbutton.setTitle(USERNAME, for: UIControlState.normal)
labelbutton.sizeToFit()
if(user["profile_photo_url"] != nil) {
print(" ENCONTRO PROFILE PHOTO URL NOT NIL Y ES \(user["profile_photo_url"])")
let photoURL = user["profile_photo_url"] as! String
let a = LoginService.sharedInstance
a.downloadImage(url: photoURL, complete: { (complete) in
if (complete) {
button.setImage(LoginService.sharedInstance.profile_photo! , for: UIControlState.normal)
button.layer.cornerRadius = 0.5 * button.bounds.size.width
// button.imageView!.contentMode = .scaleAspectFit
// button.imageView!.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
//button.imageView!.contentMode = .scaleAspectFit
//button.imageView!.clipsToBounds = true
//button.imageView!.layer.cornerRadius = 60
button.clipsToBounds = true
self.NavigationItem.rightBarButtonItems = [buttomItem,labelItem]
}
})
} else {
self.NavigationItem.rightBarButtonItem = labelItem
}
print(" EL FRAME DEL BUTTON ES \(button.frame)")
} else {
labelbutton.setTitle("Login", for: UIControlState.normal)
labelbutton.sizeToFit()
self.NavigationItem.rightBarButtonItem = labelItem
}
UIButton
dalamUIBarButtonItem
, gunakanbutton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: -20)
Jawaban:
Alasan
Masalahnya muncul karena dari ios 11
UIBarButtonItem
menggunakan autolayout alih-alih berurusan dengan bingkai.Larutan
Anda harus menambahkan batasan lebar untuk tombol gambar ini jika Anda menggunakan Xcode 9.
PS
button
tidakUIBarButtonItem
, itu adaUIButton
di dalamUIBarButtonItem
. Anda harus menyetel batasan bukan untukUIBarButtonItem
, tetapi untuk elemen di dalamnya.sumber
Terima kasih semua telah berkontribusi! kalian benar !. untuk xcode9 ios11 Anda perlu memberi batasan.
sumber
translatesAutoresizingMaskIntoConstraints
dan kemudian menemukan bahwa iOS 9 benar-benar rusak (tetapi tampak baik-baik saja di iOS 10 dan 11)Value of type 'UIBarButtonItem' has no member 'widthAnchor'
di Xcode 9 di dalamif #available(iOS 11.0, *)
bersyarat?Kode Objective C sudah usang sekarang. Tetapi bagi pengguna yang harus membangun / memelihara proyek Objective C di iOS 11 telah mengikuti terjemahan dari Swift (jawaban Karoly Nyisztor) ke Objective C membantu.
sumber
Nah, yang baru
barButtonItem
menggunakan autolayout alih-alih berurusan dengan bingkai.Gambar yang Anda tambahkan ke tombol lebih besar dari ukuran tombol itu sendiri. Itulah mengapa tombol itu sendiri diperpanjang ke ukuran gambar. Anda harus mengubah ukuran gambar agar sesuai dengan ukuran tombol yang dibutuhkan, sebelum menambahkannya ke tombol.
sumber
Saya menulis ekstensi kecil untuk mengatur batasan pada item navbar:
sumber
UIButton
bekerja dengan sangat baik.Saya melakukan ini secara objektif menggunakan baris berikut:
Terima kasih Selamat coding !!
sumber
Apa yang saya lakukan?
Di aplikasi saya, saya menambahkan gambar profil di navigationBar di item rightBarButton. sebelum iOS 11 itu berfungsi dengan baik dan ditampilkan dengan benar tetapi ketika diperbarui ke iOS 11 kemudian mengubah perilaku seperti pukulan
Jadi saya menambahkan
UIView
item tombol kanan dan menetapkanUIButton
sebagai subview dariUIView
? Seperti di bawah ini,Dan saya menetapkan batasan tinggi dan lebar
UIButton
.Dan masalah saya terpecahkan. Jangan lupa untuk mengatur
UIView
warna background menjadi warna yang jelas .sumber
Mengubah
widthAnchor
/heightAnchor
hanya akan berfungsi di perangkat iOS 11+. Untuk perangkat iOS 10 Anda harus menggunakan cara klasik untuk mengubah frame secara manual. Masalahnya adalah tidak ada dari dua pendekatan yang berfungsi untuk kedua versi, jadi Anda benar-benar perlu bergantian secara terprogram bergantung pada versi runtime, seperti di bawah ini:sumber
Meskipun iOS 11 menggunakan Autolayout untuk bilah navigasi, dimungkinkan untuk membuatnya berfungsi secara tradisional dengan mengatur bingkai. Ini kode saya yang berfungsi untuk ios11 dan ios10 atau lebih lama:
dan berikut adalah bagaimana item bar disusun:
sumber
Menempatkan batasan secara terprogram bekerja untuk saya untuk pengguna yang menjalankan iOS 11.X. Namun, tombol bar masih meregang untuk pengguna yang menjalankan iOS 10.X. Saya kira pengulas AppStore menjalankan iOS 11.X sehingga tidak dapat mengidentifikasi masalah saya sehingga aplikasi saya siap untuk dijual dan diunggah ..
Solusi saya adalah mengubah dimensi gambar saya menjadi 30x30 di perangkat lunak lain (dimensi gambar sebelumnya 120x120).
sumber
Saya juga berhasil menerapkan
intrinsicContentSize
untuk mengembalikan ukuran yang sesuai untuk setiap subkelas UIView khusus yang ingin saya gunakan sebagai customView.sumber
Saya telah membuat item tombol bar dan kemudian menambahkannya ke bar navigasi.
Dalam viewDidLoad ()
Di sini saya memiliki gambar 28x28.
sumber