layoutSubviews的理解

有時(shí)候我們?cè)陂_發(fā)或者是看其他人編寫的組件的時(shí)候 經(jīng)常會(huì)看到子類重寫了layoutSubviews的方法子類調(diào)用了有時(shí)候又會(huì)調(diào)用setNeedsLayoutlayoutIfNeeded那么有時(shí)候偶爾會(huì)想為什么需要調(diào)用setNeedsLayoutlayoutIfNeeded 這兩個(gè)方法和layoutSubviews之間又有什么聯(lián)系呢?


layoutSubview的作用是什么呢?

  • layoutSubview的字面意思就是布局子控件。
  • 需要首先需要明確的一點(diǎn)是系統(tǒng)的View并不會(huì)在layoutSubview方面里面實(shí)現(xiàn)某些代碼,如果想要在layoutSubview搞事情,必須要子類去重寫該方法
  • 當(dāng)需要更新subview的frame的時(shí)候

layoutSubview何時(shí)觸發(fā)呢?

  • 子視圖首次被添加到父視圖,子視圖會(huì)觸發(fā)layoutSubviews
  • 視圖改變自身的size的時(shí)候,會(huì)觸發(fā)layoutSubviews
  • 當(dāng)視圖添加subview的時(shí)候
  • 第一次滑動(dòng)UIScrollView的時(shí)候觸發(fā)layoutSubviews
  • 旋轉(zhuǎn)Screen會(huì)觸發(fā)父UIView上的layoutSubviews事件。
  • 手動(dòng)調(diào)用setNeedsLayout
  • init的時(shí)候不會(huì)觸發(fā)layoutSubviews

其他

  • 注意


    image.png
  • 有時(shí)候需要?jiǎng)赢嬓Ч麃硭⑿陆缑?分為通過frame或者是autolayout,如果是frame方式創(chuàng)建view并且 那么我們直接調(diào)用既可
 [UIView animateWithDuration:5 animations:^{
        self.testView.frame=CGRectMake(0, 0, 10, 111);
       
    } completion:^(BOOL finished) {
        
    }];
  • 如果是通過autolayout布局,需要把約束寫在animateWithDuration的前面,那樣子才會(huì)執(zhí)行動(dòng)畫效果。具體為什么,還不是很清楚
 self.animationViewWIdth.constant=200;
    self.animationViewWIdth.constant=100;
[UIView animateWithDuration:5 animations:^{
        [self.animationView setNeedsLayout];
        [self.animationView layoutIfNeeded];
       
    } completion:^(BOOL finished) {
        
    }];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容