Saya memiliki UITextField yang ingin saya perbesar lebarnya ketika diketuk. Saya mengatur kendala dan memastikan kendala di sebelah kiri memiliki prioritas lebih rendah daripada yang saya coba untuk menghidupkan di sisi kanan.
Berikut adalah kode yang saya coba gunakan.
// move the input box
UIView.animateWithDuration(10.5, animations: {
self.nameInputConstraint.constant = 8
}, completion: {
(value: Bool) in
println(">>> move const")
})
Ini berfungsi, tetapi tampaknya hanya terjadi secara instan dan sepertinya tidak ada gerakan apa pun. Saya mencoba mengaturnya 10 detik untuk memastikan saya tidak melewatkan apa pun, tetapi saya mendapatkan hasil yang sama.
nameInputConstraint adalah nama dari kendala yang saya kontrol seret untuk menghubungkan ke kelas saya dari IB.
Terima kasih atas bantuan Anda sebelumnya!
xcode
swift
constraints
xcode6
icekomo
sumber
sumber
Jawaban:
Anda harus terlebih dahulu mengubah kendala dan kemudian menghidupkan pembaruan.
Cepat 2
Swift 3, 4, 5
sumber
self
digunakan dalam penutupan.SWIFT 4.x:
Contoh dengan selesai:
sumber
Sangat penting untuk menunjukkan bahwa ini hanya
view.layoutIfNeeded()
berlaku untuk tampilan subviews.Karena itu untuk menghidupkan batasan tampilan, penting untuk menyebutnya pada view-to-animate superview sebagai berikut:
Contoh untuk tata letak sederhana sebagai berikut:
sumber
Dengan Swift 5 dan iOS 12.3, sesuai dengan kebutuhan Anda, Anda dapat memilih salah satu dari 3 cara berikut untuk menyelesaikan masalah Anda.
# 1. Menggunakan
UIView
'sanimate(withDuration:animations:)
metode kelasanimate(withDuration:animations:)
memiliki deklarasi berikut:Kode Playground di bawah ini menunjukkan kemungkinan penerapan
animate(withDuration:animations:)
untuk menganimasikan perubahan konstan kendala Tata Letak Otomatis.# 2. Menggunakan
UIViewPropertyAnimator
'sinit(duration:curve:animations:)
initialiser danstartAnimation()
metodeinit(duration:curve:animations:)
memiliki deklarasi berikut:Kode Playground di bawah ini menunjukkan kemungkinan implementasi
init(duration:curve:animations:)
danstartAnimation()
untuk menghidupkan perubahan konstan kendala Layout Otomatis.# 3. Menggunakan
UIViewPropertyAnimator
'srunningPropertyAnimator(withDuration:delay:options:animations:completion:)
metode kelasrunningPropertyAnimator(withDuration:delay:options:animations:completion:)
memiliki deklarasi berikut:Kode Playground di bawah ini menunjukkan kemungkinan penerapan
runningPropertyAnimator(withDuration:delay:options:animations:completion:)
untuk menganimasikan perubahan konstan kendala Tata Letak Otomatis.sumber
Dalam kasus saya, saya hanya memperbarui tampilan khusus.
sumber
Lihat ini .
Video mengatakan bahwa Anda hanya perlu menambahkan
self.view.layoutIfNeeded()
seperti berikut:sumber