iOS-KVO動態監聽UIScrollView的contentSize(UITableView、UICollectionView)


邏輯有時候需要在加載完 UITableView、UICollectionView的內容后,確定其高度或寬度來改變它的Frame,這時候可以巧妙地使用KVO添加對其 contentSize 的監聽進行處理,以 UICollectionView 為例,邏輯需要在 UICollectionView 加載完后,拿到內容大小進行處理其Frame,在添加 UICollectionView 的 view 初始化方法中,添加監聽即可;

添加監聽-監聽方法處理-移除監聽;

添加監聽-監聽方法處理-移除監聽;

添加監聽-監聽方法處理-移除監聽;

 

添加監聽

[self.collectionView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];

監聽方法

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
    if(object == self.collectionView){
        if ([keyPath isEqualToString:@"contentSize"]) {
            if(_collectionView.contentSize.height == _contentHeight) return;
            _contentHeight = _collectionView.contentSize.height;
            ///對其拿到的高或者寬進行處理
        }
    }
    
}

移除監聽

- (void)dealloc
{
    [self.collectionView removeObserver:self forKeyPath:@"contentSize"];
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM