UİView'In setNeedsLayout, layoutİfNeeded ve layoutSubviews arasındaki ilişki nedir?
Herkes*, UIView's
*3 4* *ve layoutSubviews
yöntemleri arasındaki ilişki üzerine kesin bir açıklaması olan var mı? Ve örnek bir uygulama her üç kullanılacaktır. Teşekkürler.
Bana kafası karışırsa ne varsa benim özel setNeedsLayout
bir mesajı görüntülemek gönderirsem bu yöntem sonra çağırır ertesi şey layoutSubviews
, layoutIfNeeded
oradan sağ olmasıdır. Doktorlar akışı 9 * ^ * olması beklenebilir . layoutIfNeeded
^ çağrılmasına neden olur . nedenleri layoutSubviews
çağrılacak.
CEVAP
Hala bunu anlamaya çalışıyorum, bazı şüphe ile bu almak ve eğer hataları varsa kusura bakmayın.
setNeedsLayout
kolay: sadece bir yerde bir bayrak düzeni ihtiyacı olarak işaretler UİView olarak ayarlar. layoutSubviews
sonraki önce görünümü adlı zorlar yeniden çizmek olur. Birçok durumda bu açıkça, autoresizesSubviews
özelliği nedeniyle aramana gerek yok unutmayın. Bu set (varsayılan) sonra bir manzara karesi için herhangi bir değişiklik subviews düzenlemek için Görünüm neden olur.
layoutSubviews
tüm ilginç şeyler yaparsan yöntemi. Eğer isterseniz düzeni drawRect
eşdeğer. Önemsiz bir örnek olabilir:
-(void)layoutSubviews {
// Child's frame is always equal to our bounds inset by 8px
self.subview1.frame = CGRectInset(self.bounds, 8.0, 8.0);
// It seems likely that this is incorrect:
// [self.subview1 layoutSubviews];
// ... and this is correct:
[self.subview1 setNeedsLayout];
// but I don't claim to know definitively.
}
AFAIK layoutIfNeeded
genel olarak alt sınıfta geçersiz kılınmış olması gerekiyordu değil. Düzenlendiği üzere, istediğiniz zaman arayın için yaratılmışsınız bir yöntemşu anda. Apple'ın uygulama bu gibi bir şey olabilir
-(void)layoutIfNeeded {
if (self._needsLayout) {
UIView *sv = self.superview;
if (sv._needsLayout) {
[sv layoutIfNeeded];
} else {
[self layoutSubviews];
}
}
}
(Ve gerektiğinde kendi superviews) hemen ortaya koydu zorlamak için bir görünüm layoutIfNeeded
çağırırsınız.
Nasıl SIGINT diğer sonlandırma sinyall...
Docker ana işletim sistemi ve kapsayıc...
BLAS, LAPACK ve ATLAS arasındaki ilişk...
Bir URI, URL ve URN arasındaki fark ne...
Aramak ve uygulamak arasındaki fark ne...