SORU
10 Mayıs 2010, PAZARTESİ


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
28 Mayıs 2010, Cuma


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • isupportthegosselins

    isupporttheg

    6 Aralık 2009
  • julioissk84life

    julioissk84l

    18 ŞUBAT 2008
  • Perihelion

    Perihelion

    23 NİSAN 2008