Cevap şudur [view layoutIfNeeded]
.
İşte nedeni:
Görünümün geçerli genişliğini ve yüksekliğini inceleyerek view.bounds.size.width
ve view.bounds.size.height
(veya ile oynamadığınız sürece eşdeğer olan çerçeve) almaya devam edersiniz view.transform
.
İstediğiniz şey, mevcut kısıtlamalarınızın ima ettiği genişlik ve yükseklikse, yanıt, kısıtlamaları manuel olarak incelemek değildir, çünkü bu, bunları yorumlamak için otomatik düzen sisteminin tüm kısıtlama çözme mantığını yeniden uygulamanızı gerektirir. kısıtlamaları. Bunun yerine yapmanız gereken, auto layout'tan bu düzeni güncellemesini istemektir , böylece kısıtlamaları çözer ve view.bounds'un değerini doğru çözümle günceller ve ardından view.bounds'u inceleyin.
Otomatik düzenden düzeni güncellemesini nasıl istersiniz? [view setNeedsLayout]
Otomatik düzenin çalışma döngüsünün bir sonraki dönüşünde düzeni güncellemesini istiyorsanız arayın .
Ancak, bunu hemen yeni sınırları değer erişebilmesi için, hemen düzenini güncellemek istiyorsanız geçerli fonksiyon içinde üzeri veya çalışma döngüsü başından önce başka bir noktada, o zaman çağırmanız gerekir [view setNeedsLayout]
ve [view layoutIfNeeded]
.
İkinci bir soru sordunuz: "Doğrudan bir referansım yoksa bir yükseklik / genişlik sınırlamasını nasıl değiştirebilirim?".
Eğer kısıtlamayı IB'de yaratırsanız, en iyi çözüm görüş kontrolörünüzde veya sizin görüşünüzde bir IBOutlet oluşturmaktır, böylece ona doğrudan bir referansınız olur. Kısıtlamayı kodda oluşturduysanız, onu yarattığınız sırada dahili bir zayıf özellikteki bir referansı tutmalısınız. Kısıtlamayı başka biri oluşturduysa, görünümdeki view.constraints özelliğini ve muhtemelen tüm görünüm hiyerarşisini inceleyerek ve önemli NSLayoutConstraint'i bulan mantığı uygulayarak bulmanız gerekir. Bu muhtemelen yanlış bir yoldur, çünkü aynı zamanda, bu soruya basit bir cevap olması garanti edilmediğinde, sınır boyutunu hangi belirli kısıtlamanın belirlediğini belirlemenizi de etkili bir şekilde gerektirir. Nihai sınır değeri, çoklu kısıtlamalardan oluşan çok karmaşık bir sisteme çözüm olabilir,