Otomatik düzen zincirinin temel olarak 3 farklı süreç içerdiğini biliyorum.
- kısıtlamaları güncelleme
- mizanpaj görünümleri (burada karelerin hesaplandığı yer)
- Görüntüle
Ne tamamen bana temizlemek değil mi arasındaki iç farktır -setNeedsLayout
ve -setNeedsUpdateConstraints
. Apple Dokümanlar'dan:
Bir görünümün alt görünümlerinin düzenini ayarlamak istediğinizde, uygulamanızın ana iş parçacığında bu yöntemi çağırın. Bu yöntem isteği not eder ve hemen geri döner. Bu yöntem hemen bir güncelleştirmeyi zorlamadığından, ancak bir sonraki güncelleme döngüsünü beklediğinden, bu görünümlerden herhangi biri güncellenmeden önce birden çok görünümün düzenini geçersiz kılmak için kullanabilirsiniz. Bu davranış, tüm düzen güncellemelerinizi genellikle performans için daha iyi olan bir güncelleştirme döngüsünde birleştirmenize olanak tanır.
Özel bir görüş özelliği kısıtlarını etkileyecek şekilde değiştirdiğinde, kısıtlamaları gelecekte bir noktada güncellenmesi gerektiğini belirtmek için bu yöntemi çağırabilirsiniz. Sistem daha sonra normal düzen geçişinin bir parçası olarak updateConstraints öğesini çağırır. Kısıtlamaların gerekmeden hemen önce bir kerede güncellenmesi, düzen geçişleri arasında görünümünüzde birden çok değişiklik yapıldığında kısıtlamaları gereksiz yere yeniden hesaplamamanızı sağlar.
Bir kısıtlamayı değiştirdikten sonra bir görünüm animasyon ve genellikle örneğin çağrı değişiklikleri animasyon istediğinizde:
[UIView animateWithDuration:1.0f delay:0.0f usingSpringWithDamping:0.5f initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{
[self.modifConstrView setNeedsUpdateConstraints];
[self.modifConstrView layoutIfNeeded];
} completion:NULL];
Kendi sonucumu yapmaya çalıştım:-setNeedsLayout
-setNeedsUpdateConstraints
-layoutIfNeeded
-updateConstraintsIfNeeded
-updateConstraintsIfNeeded
yalnızca kısıtlamaları güncelleyin, ancak düzeni işleme girmeye zorlamaz, bu nedenle orijinal kareler korunur-setNeedsLayout
-updateContraints
yöntemi de çağırır
Öyleyse diğeri yerine birini kullanmak ne zaman uygun? ve düzen yöntemleri hakkında, bunları bir kısıtlama değişikliği olan görünümde veya üst görünümde çağırmam gerekir mi?