Di iOS 7 judul UIButton saya bergerak masuk dan keluar pada waktu yang salah - terlambat. Masalah ini tidak muncul di iOS 6. Saya hanya menggunakan:
[self setTitle:text forState:UIControlStateNormal];
Saya lebih suka ini terjadi secara instan dan tanpa bingkai kosong. Kedipan ini sangat mengganggu dan menarik perhatian dari animasi lain.
self.button.titleLabel.text = text
. Tapi ini tidak mengubah ukuran bingkai label dan tidak bekerja dengan UIControlStates dengan benarJawaban:
Ini berfungsi untuk tombol khusus:
Untuk tombol sistem Anda perlu menambahkan ini sebelum mengaktifkan kembali animasi (terima kasih @Klaas):
sumber
[_button layoutIfNeeded];
Gunakan
performWithoutAnimation:
metode dan kemudian memaksa tata letak terjadi segera, bukan nanti.sumber
[button layoutIfNeeded];
bagian dalam blok.Ubah jenis tombol ke pembuat antarmuka bentuk kustom.
Ini berhasil untuk saya.
sumber
Di Swift Anda dapat menggunakan:
sumber
layoutIfNeeded()
maka tombol ditandai sebagai perlu digambar ulang tetapi ini tidak akan terjadi sampai tata letak berikutnya berlalu, yang akan berada di luarperformWithoutAnimation
Tolong dicatat :
ketika " buttonType " dari _button adalah "UIButtonTypeSystem" , kode di bawah ini tidak benar:
ketika " buttonType " dari _button adalah "UIButtonTypeCustom" , kode di atas valid .
sumber
Mulai di iOS 7.1 satu-satunya solusi yang bekerja untuk saya adalah menginisialisasi tombol dengan tipe
UIButtonTypeCustom
.sumber
jadi saya menemukan solusi yang berhasil:
pertama kita mengubah judul untuk tombol, lalu mengubah ukuran tombol untuk judul ini
sumber
Setel jenis tombol ke UIButtonTypeCustom dan itu akan berhenti berkedip
sumber
Cepat 5
sumber
Saya telah membuat ekstensi Swift untuk melakukan ini:
Bekerja untuk saya di iOS 8 dan 9, dengan
UIButtonTypeSystem
.(Kode untuk Swift 2, Swift 3 dan Objective-C harus serupa)
sumber
Tetapkan jenis UIButton sebagai Kustom. Itu harus menghapus animasi fade in dan out.
sumber
Biasanya hanya mengatur jenis tombol ke Custom works untuk saya, tetapi untuk alasan lain saya perlu subkelas UIButton dan mengatur jenis tombol kembali ke default (Sistem), sehingga berkedip muncul kembali.
Pengaturan
UIView.setAnimationsEnabled(false)
sebelum mengubah judul dan kemudian menjadi benar lagi setelah itu tidak menghindari kedip untuk saya, tidak peduli apakah saya meneleponself.layoutIfNeeded()
atau tidak.Ini, dan hanya ini dalam urutan yang tepat berikut, bekerja untuk saya dengan iOS 9 dan 10 beta:
1) Buat subkelas untuk UIButton (jangan lupa mengatur kelas khusus untuk tombol di Storyboard juga).
2) Ganti
setTitle:forState:
sebagai berikut:Di Interface Builder, Anda dapat membiarkan jenis tombol ke Sistem, tidak perlu mengubahnya ke Tipe Kustom agar pendekatan ini berfungsi.
Saya harap ini membantu orang lain, saya sudah berjuang begitu lama dengan tombol-tombol berkedip yang menjengkelkan yang saya harap dapat menghindarinya kepada orang lain;)
sumber
layoutIfNeeded()
:]Anda cukup membuat tombol Kustom dan itu akan berhenti bernyawa saat mengubah judul.
Anda juga dapat melakukannya di kotak centang Storyboard: pilih tombol di storyboard -> pilih inspektur atribut (keempat dari sisi kiri) -> di menu drop-down 'Type', pilih 'Custom', bukan 'System' yang mungkin dipilih .
Semoga berhasil!
sumber
Anda dapat menghapus animasi dari lapisan label judul:
sumber
Xhacker Liu versi 4 dari Swift menjawab
sumber
UIButton dengan
system
tipe memiliki animasi implisit aktifsetTitle(_:for:)
. Anda dapat memperbaikinya dengan dua cara berbeda:custom
, baik dari kode atau Pembuat Antarmuka:sumber
Saya telah menemukan bahwa solusi ini bekerja dengan UIButtonTypeSystem juga tetapi hanya akan berfungsi jika tombol diaktifkan karena beberapa alasan.
Jadi, Anda harus menambahkan ini jika Anda perlu tombol untuk dinonaktifkan saat mengatur judulnya.
(iOS 7, Xcode 5)
sumber
[_button setTitle:@"title" forState:UIControlStateDisabled]
Menggabungkan jawaban-jawaban hebat di atas menghasilkan pemecahan masalah berikut untuk UIButtonTypeSystem :
sumber
Saya mendapat masalah animasi yang jelek ketika mengubah judul tombol di pengontrol tampilan dalam UITabBarController. Judul-judul yang awalnya diatur dalam storyboard muncul sebentar sebelum menghilang ke nilai-nilai baru mereka.
Saya ingin mengulangi semua subview dan menggunakan judul tombol sebagai kunci untuk mendapatkan nilai yang dilokalkan dengan NSLocalizedString, seperti;
Saya menemukan bahwa apa yang memicu animasi sebenarnya adalah panggilan ke btn.titleLabel.text. Jadi untuk tetap menggunakan storyboard dan memiliki komponen yang dilokalisasi secara dinamis seperti ini, saya pastikan untuk mengatur ID Restorasi setiap tombol (di Identity Inspector) sama dengan judul dan menggunakannya sebagai kunci alih-alih judul;
Tidak ideal, tetapi bekerja ..
sumber
Anda benar-benar dapat mengatur judul di luar blok animasi, pastikan untuk memanggil
layoutIfNeeded()
di dalam performWithoutAnimation:Jika Anda memiliki banyak tombol, pertimbangkan untuk memanggil
layoutIfNeeded()
tampilan super:sumber
Ekstensi Xhacker Liu dikonversi ke Swift 3:
sumber
Mungkin menghasilkan 2 animasi dan 2 tombol adalah solusi yang lebih baik, untuk menghindari masalah yang muncul dengan menghidupkan dan mengubah teks tombol?
Saya membuat uibutton kedua dan menghasilkan 2 animasi, solusi ini berfungsi tanpa hickup.
sumber
Saya membuatnya bekerja dengan kombinasi jawaban:
sumber
Perpanjangan yang nyaman untuk perubahan judul tombol animasi di Swift yang berfungsi baik dengan implementasi default:
sumber
UIButton
.