iOS-獲取用xib自定義cell子控件的真實(shí)bound

當(dāng)我們使用AutoLayout做適配時(shí),可能會有這樣的需求,就是在想在適配完成前就取得子控件的真實(shí)frame,來做一些操作。比如我們想把一個(gè)正方形的UIImageView剪成一個(gè)圓形,這時(shí)候就需要這么做

self.imageView.layer.cornerRadius = self.imageView.frame.size.width / 2;
self.imageView.clipsToBounds = YES

之前我們只要把上面兩句放在layoutSubviews: 方法中設(shè)置即可,因?yàn)樵趌ayoutSubviews: 方法中,我們可以設(shè)置子控件的frame。但是一旦我們使用的AutoLayout適配后,在這個(gè)方法中就不能獲得子控件的真實(shí)frame,因?yàn)樵诖藭r(shí),AutoLayout的適配并沒有完成。那么這時(shí)我們就必須這么做了:

- (void)layoutSubviews {
    [super layoutSubviews];
    
    # 不加這下面兩句,獲得的尺寸會是xib里的未完成autolayout適配時(shí)的尺寸
    # storyboard同理(把這兩句寫在viewDidLoad:方法中,將contentView換成控制器的view)
    [self.contentView setNeedsLayout];
    [self.contentView layoutIfNeeded];
    
    
    # 這里可以提前獲得autolayout完成后適配后的子控件的真實(shí)frame
    self.imageView.layer.cornerRadius = self.imageView.frame.size.width / 2;
    self.imageView.clipsToBounds = YES;
    
    NSLog(@"%@", NSStringFromCGRect(self.imageView.frame));
}

總結(jié):AutoLayout的適配是在調(diào)用N次(子控件個(gè)數(shù))控制器的viewDidLayoutSubviews:方法后才完成的,在stackoverflow上也有人建議在此方法中做操作。但是如果像是自定義的cell這么去做,肯定不方便,再者關(guān)鍵是viewDidLayoutSubviews:會調(diào)用多次,會影響用戶體驗(yàn)和性能。

原文

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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